MFC中关于Menu的灰化

如何实现这一功能:
在程序打开时,某一菜单命令是灰化而不可用的,比如说ID_FILE_SAVE_AS不可用,
当程序执行某个其他命令之后,这个菜单命令又会不再灰化,变回可用的。
请说明一下应该用什么函数,放到哪个类当中实现?

1.使用类向导响应菜单项的UPDATE_COMMAND_UI 消息
在资源视图->Menu下找到你想要操作的菜单,右键ClassWizard,然后左侧选中菜单ID,在右侧双击ON_UPDATE_COMMAND_UI
2.可手动为菜单项添加ON_UPDATE_COMMAND_UI消息
//.h
afx_msg void OnUpdateDisplayAllHole(CCmdUI* pCmdUI);
//.cpp
BEGIN_MESSAGE_MAP(CXXXView, CView)
...
...
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS,OnUpdateFileSaveAs)
END_MESSAGE_MAP()

//函数实现
void CXXXView::OnUpdateFileSaveAs(CCmdUI* pCmdUI)
{
if(判断条件)
pCmdUI->Enable();
else
pCmdUI->Enable(FALSE);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-03
m_pMenu->EnableMenuItem(m_nIndex, MF_BYPOSITION |
(bOn ? MF_ENABLED : (MF_DISABLED | MF_GRAYED)));

参考void CCmdUI::Enable(BOOL bOn)在CMDTARG.CPP中。

MFC中关于Menu的灰化
1.使用类向导响应菜单项的UPDATE_COMMAND_UI 消息 在资源视图->Menu下找到你想要操作的菜单,右键ClassWizard,然后左侧选中菜单ID,在右侧双击ON_UPDATE_COMMAND_UI 2.可手动为菜单项添加ON_UPDATE_COMMAND_UI消息 \/\/.h afx_msg void OnUpdateDisplayAllHole(CCmdUI* pCmdUI);\/\/.cpp BEGIN_MESSAGE_MA...

MFC怎样给菜单设置带参数的函数
在源文件中添加 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)ON_COMMAND(ID_MODIFYPORT, &CMainFrame::OnNetPortSet)END_MESSAGE_MAP()ID_MODIFYPORT是菜单项的ID号,OnNetPortSet()菜单项的消息处理函数。你就可以在这里面添加用户选择该菜单项后所做的事情了啊 如果要让弹出式菜单的某个菜单项,...

VC\/MFC中如何设置 工具栏按键 灰化
你可以在其他按键的属性中把他们都设为DISABLE,那一开始就是灰色的 当你按下ID_BUTTON5,你可以调用 GetDlgItem(IDC_BUTTON_OTHER)->EnableWindow(false);GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow();来令ID_BUTTON5灰化,而其他可用

如何在MFC中实现工具条按钮的互斥
练习项目:在窗口的客户区用鼠标左键点两下,以这两点为源点画椭圆或矩形。鼠标右键即时弹出菜单实现图形的选择(椭圆或矩形);工具条实现颜色的选择。问题:考虑到按了某工具条按钮后再按此按钮就没有意义,所以要灰化所按的按钮,同时又要启用以前灰化的按钮。如果不灰化当前所按的按钮,程序正常,但...

MFC中的ClassWizard的使用方法?
★ Delete Function按钮:该按钮用于在当前选定的类中删除已有的成员函数。Delete Function按钮平时是灰化禁止的,只有当用户在Member functions列表框中选中某个消息处理函数之后,才能选择该按钮。★ Edit Code按钮:单击该按钮将打开编辑窗口,并将光标位置自动跳到当前选定的成员函数的源代码处。2. Member ...

MFC中的ClassWizard的使用方法?
Function按钮:该按钮用于在当前选定的类中删除已有的成员函数。Delete Function按钮平时是灰化禁止的,只有当用户在Member functions列表框中选中某个消息处理函数之后,才能选择该按钮。★ Edit Code按钮:单击该按钮将打开编辑窗口,并将光标位置自动跳到当前选定的成员函数的源代码处。2.Member Variables选项卡...

相似回答