关于VC菜单项的勾选标记

来源:百度知道 编辑:UC知道 时间:2024/06/04 22:38:02
大哥们,我在用MFC写东西,要对一个菜单项做如此动作:
点击一下旁边有个勾,再点击一下没有了,请问怎么做!?
谢谢。
DWORD CheckMenuItem(
HMENU hmenu, // handle to menu
UINT uIDCheckItem, // menu item to check or uncheck
UINT uCheck // menu item options
);

你可以在处理这个菜单项的Command事件中,先用GetMenuState,得到菜单项现在的状态,然后用CheckMenuItem这个函数,设定它的选定状态.
至于这两个函数具体的用法,我想你可以查一下MSDN.

给你的菜单项添加UPDATE_COMMAND_UI响应。方法是:在CMainFrame,右键,选择Message Handler,关联你的菜单项ID,就可以添加UPDATE_COMMAND_UI响应了,然后Eidt Existing,添加代码如下:
pCmdUI->SetCheck(1);
根据你的实际情况不同,还需要flag标志控制,反复勾选的动作。你也可以尝试CheckMenuItem函数。
根据你的补充,我给你提供一个思路,你可以看这行代码:
pCmdUI->m_pMenu->CheckMenuItem(ID_ITEM1, MF_CHECKED);
当然,这个思路还需要你根据实际情况去扩充和完善。

在这个菜单的command响应事件中SetCheck就行了。
用GetCheck获得状态。

在你要设置勾的那个菜单项中响应ON_UPDATE_COMMAND_UI和COMMAND消息。
在ON_UPDATE_COMMAND_UI响应函数里加上
pCmdUI->SetCheck(state);
COMMAND响应函数加上
state = !state;
就可以
----------------mainfrm.h----
.
.
public:
afx_msg void OnUpdateXXX(CCmdUI *pCmdUI);
afx_msg void OnXXX();
static BOOL state = TRUE; //勾的初始状态 TRUE为选上
.
.
-----------------------------mainfrm.cpp--
.
.
BEGIN_MESSAGE_MAP(CMainF