gpt4 book ai didi

c++ - Win32 在代码中更改菜单

转载 作者:可可西里 更新时间:2023-11-01 09:56:19 25 4
gpt4 key购买 nike

我没有做过很多 Windows 编程,但我似乎无法找到如何做到这一点...

我的应用程序有一个工具栏,允许用户打开和关闭某些功能。当单击这些工具栏之一时,我有窗口可以识别,但是其中一个选项使用“已检查”功能。

问题是我如何知道这在我的代码中是当前的 true 还是 false,以及如何在我的代码中将其设置为 false?

基本上我需要这个...

enter image description here

看起来像这样......

enter image description here

用户点击后

到目前为止的代码...

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/

25 4 0