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

6

下面是它正在做的事情

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

在.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个回答

13

找到解决方案:

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不会显示,只有它的菜单项会显示。


SO是真正的WinAPI文档。 - M.M

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接