禁用/启用MFC Feature Pack的功能区按钮

5

我正在使用MFC功能包,并且在一个功能区上有一些按钮,这些按钮是CMFCRibbonButton的实例。问题是,我想在某些条件下在运行时启用和禁用其中一些按钮。但是,因为没有特定的方法来实现这一点,我该怎么办呢?我听说解决方案是在运行时附加/分离事件处理程序,但我不知道如何操作...

2个回答

16
当您创建CMFCRibbonButton对象时,需要指定相关联的命令ID(请参阅CMFCRibbonButton构造函数的文档 here)。然后使用MFC中的常规命令更新机制使用CCmdUI类来启用和禁用功能区按钮。
例如,如果您有一个功能区按钮,其命令ID为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);
}

您还应该为CMyView类的消息映射添加ON_COMMANDON_UPDATE_COMMAND_UI条目:

// 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中的消息映射更多信息,请参考MSDN中的 TN006:消息映射

希望这能对您有所帮助!


2
ChrisN给出了一个非常完美的答案。您可以通过从此处下载VS2008示例包,并打开MSOffice2007Demo解决方案,来查看实现方法的示例。
运行示例时,请查看“视图”选项卡中的“缩略图”复选框,它是禁用状态。
这由CMSOffice2007DemoView :: OnUpdateViewThumb控制,该函数调用pCmdUI-> Enable(FALSE);。您可以在运行时将其更改为分别调用TRUEFALSE以启用/禁用按钮。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接