如何更改菜单项文字?

时间:2014-07-24 19:14:06

标签: 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;

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

1 个答案:

答案 0 :(得分:3)

@HansPassant指出解决方案是:

  

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

然后:

  

添加menuitem.fMask = MIIM_TYPE | MIIM_DATA;,效果很好

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