我正在使用MFC功能包,并且在一个功能区上有一些按钮,这些按钮是CMFCRibbonButton的实例。问题是,我想在某些条件下在运行时启用和禁用其中一些按钮。但是,因为没有特定的方法来实现这一点,我该怎么办呢?我听说解决方案是在运行时附加/分离事件处理程序,但我不知道如何操作...
我正在使用MFC功能包,并且在一个功能区上有一些按钮,这些按钮是CMFCRibbonButton的实例。问题是,我想在某些条件下在运行时启用和禁用其中一些按钮。但是,因为没有特定的方法来实现这一点,我该怎么办呢?我听说解决方案是在运行时附加/分离事件处理程序,但我不知道如何操作...
CMFCRibbonButton
对象时,需要指定相关联的命令ID(请参阅CMFCRibbonButton
构造函数的文档 here)。然后使用MFC中的常规命令更新机制使用CCmdUI
类来启用和禁用功能区按钮。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_COMMAND
和ON_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:消息映射。
希望这能对您有所帮助!
CMSOffice2007DemoView :: OnUpdateViewThumb
控制,该函数调用pCmdUI-> Enable(FALSE);
。您可以在运行时将其更改为分别调用TRUE
或FALSE
以启用/禁用按钮。