我没有做很多windows编程,但我似乎无法找到如何做到这一点......
我的应用程序的工具栏允许用户打开和关闭某些功能。我有窗口识别何时单击其中一个工具栏,但其中一个选项使用“已检查”功能。
问题是如何在我的代码中知道这是当前的真或假,以及如何在我的代码中将其设置为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;
}
由于
答案 0 :(得分:5)
对于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);
此代码切换checked属性。它假定您通过ID而不是位置来识别菜单项。
查看您发布的代码,(HMENU)IDR_MENU1
似乎很可疑。我认为IDR_MENU1
是标识符而不是HMENU
。铸造始终是潜在问题的标志。如果您没有HMENU
,请致电GetMenu
以获取它。
在您的代码中,您应该测试API调用的返回值,如果它们返回FALSE
,那么您应该调用GetLastError
以获取有关失败的更多信息。