我正在使用MFC功能包,我在功能区栏上有一些按钮,CMFCRibbonButton的实例。问题是我想在某些条件下启用和禁用其中一些,但是在运行时。我怎样才能做到这一点?因为没有具体的方法...我听说解决方案是在运行时附加/分离事件处理程序,但我不知道如何......
答案 0 :(得分:14)
创建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_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中消息映射的详细信息,请参阅MSDN中的TN006: Message Maps。
我希望这有帮助!
答案 1 :(得分:2)
ChrisN给出了一个非常完美的答案。您可以通过从here下载VS2008示例包并打开MSOffice2007Demo解决方案来查看完成此操作的示例。
运行示例时,请查看功能区的“视图”选项卡中的“缩略图”复选框,它已被禁用。
这由CMSOffice2007DemoView::OnUpdateViewThumb
控制,调用pCmdUI->Enable(FALSE);
。您可以将其更改为在运行时调用TRUE
或FALSE
以分别启用/禁用该按钮。