Я использую пакет функций MFC, и у меня есть несколько кнопок на ленте, экземпляры CMFCRibbonButton. Проблема в том, что я хотел бы включать и отключать некоторые из них в определенных условиях, но во время выполнения. Как я могу это сделать? потому что для этого нет специального метода ... Я слышал, что решением было бы прикрепить / отсоединить обработчики событий во время выполнения, но я не знаю, как ...
Отключить / включить кнопки ленты для пакета функций MFC
Ответы (2)
При создании объекта CMFCRibbonButton
необходимо указать связанный идентификатор команды (см. Документацию для конструктора CMFCRibbonButton
здесь). Включение и отключение кнопок ленты затем выполняется с помощью обычного механизма обновления команд в MFC с использованием CCmdUI
класс.
Например, если у вас есть кнопка ленты с идентификатором команды ID_MYCOMMAND
и вы хотите обрабатывать эту команду в классе представления вашего приложения, вам следует добавить в класс следующие функции:
// MyView.h
class CMyView : public CView {
// ...
private:
afx_msg void OnMyCommand();
afx_msg void OnUpdateMyCommand(CCmdUI* pCmdUI);
DECLARE_MESSAGE_MAP()
};
и реализуем их в файле .cpp:
// MyView.cpp
void CMyView::OnMyCommand() {
// add command handler code.
}
void CMyView::OnUpdateMyCommand(CCmdUI* pCmdUI) {
BOOL enable = ...; // set flag to enable or disable the command.
pCmdUI->Enable(enable);
}
Вам также следует добавить записи ON_COMMAND
и ON_UPDATE_COMMAND_UI
в карту сообщений для класса CMyView
:
// MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_MYCOMMAND, &CMyView::OnMyCommand)
ON_UPDATE_COMMAND_UI(ID_MYCOMMAND, &CMyView::OnUpdateMyCommand)
END_MESSAGE_MAP()
Для получения дополнительной информации о картах сообщений в MFC см. TN006: карты сообщений в MSDN.
Надеюсь, это поможет!
ChrisN дал довольно точный ответ. Вы можете увидеть пример того, как именно это делается, загрузив VS2008 Sample Pack из здесь и откройте решение MSOffice2007Demo.
При запуске примера посмотрите на флажок «Эскизы» на вкладке «Просмотр» на ленте, он отключен.
Это контролируется CMSOffice2007DemoView::OnUpdateViewThumb
, который вызывает pCmdUI->Enable(FALSE);
. Вы можете изменить это на вызов TRUE
или FALSE
во время выполнения, чтобы включить / выключить кнопку соответственно.