c++ - 如何在 MFC 中设置菜单项旁边的复选标记?

标签 c++ events menu mfc

我的对话框顶部有一个菜单栏,其中一个选项是“模式”,其中包含“正常”和“调试”。我试图做到这一点,以便当用户单击这两个选项中的任何一个时,下拉菜单中最后选定的项目旁边会出现一个复选标记。

The menu I'm working with.

这是我通过谷歌搜索找到的,但我无法让它工作:

//event handler for user clicking on mode then normal in the menu
void CNew_RGB_ControlDlg::OnModeNormal()
{
    //check the normal option when the user selects normal mode in the menu
    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    menu.CheckMenuItem(ID_MODE_NORMAL, MF_CHECKED | MF_BYCOMMAND); //returns 8
    menu.CheckMenuItem(ID_MODE_DEBUG, MF_UNCHECKED | MF_BYCOMMAND);//returns 0
}

我还有另一个这样的功能,当单击“调试”时,它的代码相同,只是切换了选中和未选中的代码。

返回值使它看起来应该按照 MSDN 工作。 ,但菜单项永远不会改变。

我也尝试过这个:

void CNew_RGB_ControlDlg::OnModeNormal()
{
    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    menu.GetSubMenu(1)->CheckMenuItem(0, MF_BYPOSITION|MF_CHECKED);
    menu.GetSubMenu(1)->CheckMenuItem(1, MF_BYPOSITION|MF_CHECKED);
}

我做错了什么?我需要做什么才能使这项工作成功?

最佳答案

您需要获取对话框中使用的当前菜单,而不是在选择某个项目时加载新菜单,例如

CMenu *pMenu = GetMenu();
if (pMenu != NULL)
{   pMenu->CheckMenuItem(ID_MODE_NORMAL, MF_CHECKED | MF_BYCOMMAND);
    pMenu->CheckMenuItem(ID_MODE_DEBUG, MF_UNCHECKED | MF_BYCOMMAND);
}

关于c++ - 如何在 MFC 中设置菜单项旁边的复选标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912134/

相关文章:

c++ - 将 .asm 文件编译并链接到 C++ 代码

python - Chrome native 消息传递不接受特定大小的消息 (Windows)

android - 在 Android 日历中添加事件

c# - 如何使用 SAS 解决 Azure 事件中心中的授权错误 (401)?

javascript - 如何使用本地存储来维护下拉菜单状态?

c++ - 允许将 (double *) 转换为 (double **) 吗?

c++ - 如何只保留整数中的非零数字?

c# - 当以编程方式更改值时,不触发 DataGridView 中的单元格值更改事件

ASP.NET 4 菜单隐藏在包含 Silverlight 应用程序的 div 后面

ubuntu - FCEUX 模拟器不显示工具菜单