4

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

4

2 回答 2

15

创建CMFCRibbonButton对象时,您必须指定关联的命令 ID(请参阅此处CMFCRibbonButton的构造函数文档)。然后使用 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);
}

您还应该在类的消息映射中添加ON_COMMANDON_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 中的消息映射。

我希望这有帮助!

于 2009-02-02T17:48:03.730 回答
2

ChrisN 给出了一个非常完美的答案。您可以通过从此处下载 VS2008 示例包并打开 MSOffice2007Demo 解决方案来查看如何完成此操作的示例。

运行示例时,请查看功能区“视图”选项卡中的“缩略图”复选框,它已被禁用。

这是由CMSOffice2007DemoView::OnUpdateViewThumbwhich calls控制的pCmdUI->Enable(FALSE);。您可以将其更改为调用TRUEFALSE在运行时分别启用/禁用按钮。

于 2009-02-02T23:00:21.683 回答