c++ - 如何在包含子菜单项的菜单项上打勾。 (Visual Studio 2008 C++/MFC)

标签 c++ winapi mfc

我有一个包含子菜单的菜单。

例如:

  • 项目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/

相关文章:

c++ - 如何测试输出到 std::cout(连接到管道)是否会阻塞

c++ - 在 Win32 桌面应用程序上创建按钮时出错

通过家庭网络上两台机器之间的套接字连接?

c - 如何检索加载我的 dll 的线程的地址

c++ - 如何在 C++ MFC 中同时打开两个对话框?

c++ - 基类指针,访问派生类成员变量?

c++ - boost 截止时间计时器在 iOS 中过期不准确

c++ - 如何在主线程繁忙时获取所有 mousemove 事件 Windows MFC C++

c++ - MFC:如何创建带有透明 PNG 作为背景(而不是窗口镶边)的 Skinnied Dialog?

c++ - 如何访问VTK的类枚举域