如何更改菜单项文本?

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)

但它不起作用,文本没有改变。我做错了什么?如何实施?

YeP*_*IcK 6

正如@HansPassant 指出的,解决方案是:

您没有正确使用 MENUITEMDATA,您忘记设置 fMask 成员。阅读结构的 MSDN 文章了解详细信息

进而:

添加menuitem.fMask = MIIM_TYPE | MIIM_DATA;,它运行良好

我不能相信这个解决方案,但我在这里提供它,以便下一个需要回答该问题的人可以轻松找到它,而无需解析评论部分