Chr*_*ris 2 c++ windows winapi menuitem visual-studio
我不做很多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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢
对于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);
Run Code Online (Sandbox Code Playgroud)
此代码切换checked属性.它假定您通过ID而不是位置来识别菜单项.
查看您发布的代码,(HMENU)IDR_MENU1看起来很可疑.我想这IDR_MENU1是一个标识符而不是标识符HMENU.铸造始终是潜在问题的标志.如果您没有HMENU牵手,请致电GetMenu获取.
在您的代码中,您应该测试API调用的返回值,如果它们返回,FALSE那么您应该调用GetLastError以获取有关失败的更多信息.
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |