如何设置检查菜单项 mfc c++
Posted
技术标签:
【中文标题】如何设置检查菜单项 mfc c++【英文标题】:How to set check on menu item mfc c++ 【发布时间】:2011-12-22 09:07:09 【问题描述】:如何在 mfc c++ 菜单项上设置检查我尝试了这个,但是,总是未选中的菜单项。
CString tcBuff;
CMenu popMenu;
popMenu.LoadMenu(nMenuID);
if (text.Compare(defaultconfig) == 0)
tcBuff.LoadStringW(IDC_DEFAULTREMOVE);
popMenu.ModifyMenuW(ID_CONFIGURATION_DEFAULT,0,ID_CONFIGURATION_DEFAULT,tcBuff);
popMenu.CheckMenuItem(IDC_DEFAULTREMOVE, MF_CHECKED || MF_BYCOMMAND);
感谢您的帮助。
【问题讨论】:
您正在修改一个新的CMenu
对象,而不是您的应用程序中使用的 actual 菜单。也许是时候拿起a good book on C++ 并确保您了解 RAII?
感谢您的回答,我解决了我的问题:)
通常情况下,要检查您不这样做的菜单项。您应该使用 ON_UPDATE_COMMAND_UI(IDC_DEFAULTREMOVE, function) 来通过 ID 处理菜单项的函数。该函数有一个参数pCmdUI。因此,您可以在 if 块中执行 pCmdUI->SetCheck(TRUE); 和 pCmdUI->SetText(tcBuff);。跨度>
【参考方案1】:
您需要|
运算符,而不是||
运算符。
您想要组合 MF_CHECKED
和 MF_BYCOMMAND
位标志,您可以使用按位或运算来完成。这需要|
运算符。
将您的代码更改为如下所示:
popMenu.CheckMenuItem(IDC_DEFAULTREMOVE, MF_CHECKED | MF_BYCOMMAND);
||
运算符是逻辑 OR 运算符。它实际上给了你这个:
0x8 /* MF_CHECKED */ || 0x0 /* MF_BYCOMMAND */ == 0
相当于MF_UNCHECKED
。
【讨论】:
@nidhal:另一种可能性(也是我第一次看到的那个)是您正在创建和修改一个 newCMenu
对象,该对象一旦被自动销毁超出范围。您需要修改应用程序中的 actual 菜单。问题中没有足够的代码来实际查看正在发生的事情。使用了许多未声明的变量。【参考方案2】:
尝试在语句popMenu.CheckMenuItem(IDC_DEFAULTREMOVE, MF_CHECKED || MF_BYCOMMAND)中使用ID_CONFIGURATION_DEFAULT而不是IDC_DEFAULTREMOVE;
ID_CONFIGURATION_DEFAULT - 命令 ID IDC_DEFAULTREMOVE - 字符串资源 ID
【讨论】:
以上是关于如何设置检查菜单项 mfc c++的主要内容,如果未能解决你的问题,请参考以下文章