我正在使用MFC功能包,并且在功能区栏上有一些按钮,CMFCRibbonButton的实例。问题是我想在某些条件下启用和禁用其中的一些,但是在运行时。我怎样才能做到这一点?因为没有具体的方法...我听说解决方案是在运行时附加/分离事件处理程序,但我不知道如何...禁用/启用MFC功能包的功能区按钮
4
A
回答
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_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。
我希望这有助于!
2
ChrisN给出了一个非常完美的答案。您可以通过从here下载VS2008 Sample Pack并打开MSOffice2007Demo解决方案,看到完全如何实现的示例。
运行示例时,请查看功能区“视图”选项卡中的“缩略图”复选框,该选项已禁用。
这由CMSOffice2007DemoView::OnUpdateViewThumb
控制,其调用pCmdUI->Enable(FALSE);
。您可以在运行时更改此设置以呼叫TRUE
或FALSE
分别启用/禁用按钮。
相关问题
- 1. 禁用功能区按钮
- 2. 禁用功能区按钮
- 3. 禁用按钮的功能
- 4. 如何启用/禁用Outlook中的功能区按钮
- 5. 启用/禁用Word 2007中的功能区按钮Addin
- 6. 启用由Excel/PPT禁用的内置Office功能区按钮
- 7. 功能“按钮被禁用”
- 8. 从窗体启用/禁用功能区按钮
- 9. 在自定义功能区Outlook中启用禁用按钮
- 10. 使用功能区按钮
- 11. 启用/禁用基于单选按钮的功能按钮
- 12. 使用XML功能区的动态功能区按钮大小
- 13. 以编程方式添加到SharePoint 2010功能区后禁用功能区按钮功能区
- 14. 如何在功能区加载后启用功能区按钮vb.net
- 15. 重构的启用/禁用按钮切换功能
- 16. JQuery按钮启用和禁用点击后的CSS功能
- 17. 禁用按钮功能(Wx Widgets)
- 18. ASP.NET禁用按钮并运行功能
- 19. 开关按钮 - 禁用滑动功能
- 20. ASP禁用按钮和运行功能
- 21. 自我禁用按钮,辅助功能
- 22. 点击后禁用按钮功能
- 23. 功能区按钮点击
- 24. 使用插件禁用功能区按钮
- 25. 启用/经由功能/方法禁用按钮(C#)
- 26. 按钮在opencv for android中禁用和启用功能(runOnUiThread)
- 27. 功能启用和禁用动态按钮(FileSystemWatcher)
- 28. 在后台启用按钮功能
- 29. 使用按钮启动/停止功能
- 30. jQuery功能启用分区