我需要在运行时更改菜单项文本。我尝试使用 GetMenuItemInfo() 和 SetMenuItemInfo():
case WM_NOTIFYICONMSG:
switch (lParam) {
case WM_LBUTTONDBLCLK:
someAction();
break;
case WM_RBUTTONDOWN:
{
POINT point;
GetCursorPos(&point);
HMENU hMenu;
HMENU hMenuTrackPopup;
hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU));
if (hMenu) {
MENUITEMINFOA menuitem = { sizeof(MENUITEMINFOA) };
GetMenuItemInfoA(hMenu, IDM_EXIT, false, &menuitem);
menuitem.dwTypeData = "New text here";
SetMenuItemInfoA(hMenu, IDM_EXIT, false, &menuitem);
hMenuTrackPopup = GetSubMenu(hMenu, 0);
TrackPopupMenu(hMenuTrackPopup, 0, point.x, point.y, 0, hWnd, NULL);
DestroyMenu(hMenu);
}
}
break;
default:
break;
}
break;
但它不起作用,文本没有改变。我做错了什么?如何实现?
最佳答案
正如@HansPassant 指出的那样,解决方案是:
You are not using MENUITEMDATA correctly, you forgot to set the fMask member. Read the MSDN article for the struct for details
然后:
add
menuitem.fMask = MIIM_TYPE | MIIM_DATA;
and it works well
我不能把这个解决方案归功于我,但我在这里提供它,以便下一个需要该问题答案的人可以轻松找到它,而无需解析评论部分
关于c++ - 如何更改菜单项文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942087/