2009-02-02 118 views
4

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

回答

13

当您创建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); 
} 

你也应该补充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中消息映射的更多信息,请参阅MSDN中的TN006: Message Maps

我希望这有助于!

2

ChrisN给出了一个非常完美的答案。您可以通过从here下载VS2008 Sample Pack并打开MSOffice2007Demo解决方案,看到完全如何实现的示例。

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

这由CMSOffice2007DemoView::OnUpdateViewThumb控制,其调用pCmdUI->Enable(FALSE);。您可以在运行时更改此设置以呼叫TRUEFALSE分别启用/禁用按钮。