MFC 菜单 选中
作者[weylan] 发表于[2007-6-6 0:02:00]
还没解决么?下面是我记录的一点心得,已全部测试通过:
SDI或MDI工程中,在菜单项前打上或取消复选框标志。先给CMainFrame类添加一个BOOL类的成员变量m_stat,然后在菜单项的响应函数体中加入:
m_stat=!m_stat;
并在菜单项的UPDATE_COMMAND_UI响应函数中加入:
pCmdUI->SetCheck(m_stat);
注:如果是自绘风格(MF_OWNERDRAW)的菜单,就不会在菜单前显示小钩的。
-----------------------------------------------------------
对话框工程的话,先同样在对话框类中添加一个BOOL类的成员变量m_stat,然后用下面代码实现:
HMENU hMenu=::LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU1)); //IDR_MENU1为资源中菜单的ID
::SetMenu(m_hWnd,hMenu);
if(m_stat)
CheckMenuItem(hMenu,IDC_ENABLE,MF_UNCHECKED); //IDC_ENABLE为菜单前要打钩的子项
else
CheckMenuItem(hMenu,IDC_ENABLE,MF_CHECKED);
m_stat=!m_stat;
---------------------------------------------
也反复试过了,对话框工程中用pCmdUI->SetCheck(m_stat);的方法无效。
SDI或MDI工程中,在菜单项前打上或取消复选框标志。先给CMainFrame类添加一个BOOL类的成员变量m_stat,然后在菜单项的响应函数体中加入:
m_stat=!m_stat;
并在菜单项的UPDATE_COMMAND_UI响应函数中加入:
pCmdUI->SetCheck(m_stat);
注:如果是自绘风格(MF_OWNERDRAW)的菜单,就不会在菜单前显示小钩的。
-----------------------------------------------------------
对话框工程的话,先同样在对话框类中添加一个BOOL类的成员变量m_stat,然后用下面代码实现:
HMENU hMenu=::LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU1)); //IDR_MENU1为资源中菜单的ID
::SetMenu(m_hWnd,hMenu);
if(m_stat)
CheckMenuItem(hMenu,IDC_ENABLE,MF_UNCHECKED); //IDC_ENABLE为菜单前要打钩的子项
else
CheckMenuItem(hMenu,IDC_ENABLE,MF_CHECKED);
m_stat=!m_stat;
---------------------------------------------
也反复试过了,对话框工程中用pCmdUI->SetCheck(m_stat);的方法无效。
本文分享了在MFC中实现菜单项选中状态切换的技巧,包括SDI或MDI工程和对话框工程的具体操作步骤。通过修改成员变量m_stat的值,并在响应函数中更新菜单项的勾选状态,实现菜单项的选中与取消选中。对于自绘风格的菜单,无法显示小勾。
878

被折叠的 条评论
为什么被折叠?



