BAr*_*ell 5 c++ winapi visual-c++
我需要在运行时更改菜单项文本。我尝试使用 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;
Run Code Online (Sandbox Code Playgroud)
但它不起作用,文本没有改变。我做错了什么?如何实施?
正如@HansPassant 指出的,解决方案是:
您没有正确使用 MENUITEMDATA,您忘记设置 fMask 成员。阅读结构的 MSDN 文章了解详细信息
进而:
添加
menuitem.fMask = MIIM_TYPE | MIIM_DATA;,它运行良好
我不能相信这个解决方案,但我在这里提供它,以便下一个需要回答该问题的人可以轻松找到它,而无需解析评论部分
| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |