C ++ Win32从资源创建弹出菜单

时间:2013-09-04 00:29:45

标签: c++ winapi menu resources popup

Here is what it is doing

我正在尝试加载弹出“右键单击”菜单,并使用资源文件来定义菜单项。图为右键单击时发生的情况,显示2个项目的空间,这是正确的,但没有显示任何文字。

在.cpp:

POINT pt;
pt.x = LOWORD (lParam);
pt.y = HIWORD (lParam);
ClientToScreen (hwnd, &pt);
HMENU hMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_POPUPMENU));
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL);

和资源:

IDR_POPUPMENU MENU DISCARDABLE 
BEGIN
MENUITEM "test",              IDM_TEST
MENUITEM "Close",               IDM_CLOSE
END

关于我的错误的任何想法?

感谢。

编辑:我刚刚测试过,点击“无文本显示”区域,它会发送正确的消息。什么可能导致它不显示文本?

2 个答案:

答案 0 :(得分:9)

找到解决方案:

HMENU hMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_POPUPMENU));
hMenu = GetSubMenu(hMenu, 0);

和资源:

IDR_POPUPMENU MENU DISCARDABLE 
BEGIN 
   POPUP "TEST" 
      BEGIN     
        MENUITEM "Test",                IDM_TEST
        MENUITEM "Close",               IDM_CLOSE
      END
END

只需使用开始子菜单启动资源输入,TEST不显示,只显示其菜单项。

答案 1 :(得分:5)

您的菜单资源不正确。它必须是popupmenu。 例如:

IDR_MENU_TRAY MENU
BEGIN
    POPUP "ContextMenu"
    BEGIN
        MENUITEM "ShowWindow",                  ID_POPUP_SHOWWINDOW
        MENUITEM "Exit",                        ID_POPUP_EXIT
    END
END

TrackPopupMenu第一个参数是与现有菜单项关联的子菜单的句柄。 您可以在此处查看示例:http://msdn.microsoft.com/EN-US/library/ms647558(v=VS.85,d=hv.2).aspx