我有一个包含子菜单的菜单。
例如:
- 项目1
- 项目2
- 项目3
- 项目A
- 项目B
Item3 下有项目。
在任何给定时间,都应检查 1、2 或 3 以下的项目。由于我没有 Item3 的 ID,当我尝试对 Item3 设置检查以指示其子项之一具有复选标记时,我必须使用 MF_BYPOSITION
指示符。如果选中 A 或 B,则第 3 项应该有一个复选标记。我能够检查第 1 项和第 2 项以及 A 和 B - 但无法找出第 3 项。
我无法成功使用 ::CheckMenuItem()
或 ModifyMenu()
设置复选标记。
有人能给我举一个成功做到这一点的例子吗?文档似乎表明可以完成,但我一直无法做到。
编辑
这适用于设置为 dlg 框菜单的菜单。菜单栏包含三个项目 - 其中一项下拉到上面显示的内容。
另请注意,它用作右键单击的弹出窗口,但我会采纳任何建议以在任何情况下工作。
最佳答案
我之前已经为弹出菜单做过这个。您需要按位置而不是 ID 访问子菜单。使用上面的示例,项目 3 将位于位置 2:
CMenu popupMenu;
popupMenu.LoadMenu(IDR_MYMENU);
popupMenu.GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION|MF_CHECKED);
.
.
.
popupMenu.GetSubMenu(0)->TrackPopupMenu(...);
但是,我还没有对菜单栏中的项目执行此操作。
OP 蒂姆编辑:
为了完整性
要使其与菜单项一起使用,您必须获取 hmenu
// MENU_POSITION is the zero based location of the menu you want to use. (file, edit, view, help... etc)
HMENU mainMenu = ::GetMenu(m_hWnd);
HMENU subMenu = GetSubMenu( mainMenu, MENU_POSITION);
SetMenuState(subMenu);
关于c++ - 如何在包含子菜单项的菜单项上打勾。 (Visual Studio 2008 C++/MFC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407253/