Отключить / включить кнопки ленты для MFC Feature Pack - PullRequest
4 голосов
/ 02 февраля 2009

Я использую MFC Feature Pack и у меня есть несколько кнопок на ленточной панели, экземпляры CMFCRibbonButton. Проблема в том, что я хотел бы включать и отключать некоторые из них в определенных условиях, но во время выполнения. Как я могу это сделать? потому что нет конкретного метода для этого ... Я слышал, что решение было бы подключить / отключить обработчики событий во время выполнения, но я не знаю как ...

Ответы [ 2 ]

14 голосов
/ 02 февраля 2009

При создании объекта 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.

Надеюсь, это поможет!

2 голосов
/ 03 февраля 2009

ChrisN дал довольно идеальный ответ. Вы можете увидеть пример того, как именно это делается, скачав Образец пакета VS2008 с здесь и открыв решение MSOffice2007Demo.

При запуске образца посмотрите на флажок «Миниатюры» на вкладке «Вид» ленты, он отключен.

Это управляется CMSOffice2007DemoView::OnUpdateViewThumb, который вызывает pCmdUI->Enable(FALSE);. Вы можете изменить это на вызов TRUE или FALSE во время выполнения, чтобы включить / отключить кнопку соответственно.

...