我没有做过很多 Windows 编程,但我似乎无法找到如何做到这一点...
我的应用程序有一个工具栏,允许用户打开和关闭某些功能。当单击这些工具栏之一时,我有窗口可以识别,但是其中一个选项使用“已检查”功能。
问题是我如何知道这在我的代码中是当前的 true 还是 false,以及如何在我的代码中将其设置为 false?
基本上我需要这个...
看起来像这样......
用户点击后
到目前为止的代码...
switch (wmId)
{
case ID_SETTINGS_ENABLEGRAVITY:
{
MENUITEMINFO mii = { sizeof(MENUITEMINFO) };
mii.fMask = MIIM_STATE;
GetMenuItemInfo((HMENU)IDR_MENU1,ID_SETTINGS_ENABLEGRAVITY, FALSE, &mii);
mii.fState ^= MFS_CHECKED;
SetMenuItemInfo((HMENU)IDR_MENU1,ID_SETTINGS_ENABLEGRAVITY, FALSE, &mii);
break;
}
谢谢
最佳答案
对于 Win32,您可以使用 GetMenuItemInfo
执行此操作和 SetMenuItemInfo
功能:
MENUITEMINFO mii = { sizeof(MENUITEMINFO) };
mii.fMask = MIIM_STATE;
GetMenuItemInfo(hMenu, uItem, FALSE, &mii);
mii.fState ^= MFS_CHECKED;
SetMenuItemInfo(hMenu, uItem, FALSE, &mii);
此代码切换选中的属性。它假定您是通过 ID 而不是位置来识别菜单项。
查看您发布的代码,(HMENU)IDR_MENU1
看起来很可疑。我想 IDR_MENU1
是一个标识符而不是 HMENU
。转换始终是潜在问题的标志。如果您手头没有 HMENU
,请调用 GetMenu
获取它。
在您的代码中,您应该测试 API 调用的返回值,如果它们返回 FALSE
,那么您应该调用 GetLastError
以获取有关失败的更多信息。
关于c++ - Win32 在代码中更改菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988606/