4

我使用 C++ 和 win32 编程编写了一个 shell 扩展 dll 上下文菜单程序。开发环境是 Visual Studio 2008 和 2010。在下面的示例代码中,我试图只为主菜单添加菜单图标。主菜单未显示菜单图标。(我需要为所有菜单项添加图标。)。

请更正以下代码。

QueryContextMenu(HMENU hmenu, UINT /*uInd*/, UINT idCmdFirst, UINT /*idCmdLast*/, UINT /*uFlags*/ )
{


    int id = 1;

    HBITMAP hBitmap = NULL;

    hBitmap = (HBITMAP)LoadImage((HMODULE)_AtlBaseModule.m_hInst,MAKEINTRESOURCE(IDB_MYBITMAP), IMAGE_BITMAP, 12, 12, 0);


    HMENU submenu = CreatePopupMenu();

    AppendMenu(submenu, MF_STRING|MF_ENABLED, uidCmdFirst + id++, L"XP");
    AppendMenu(submenu, MF_STRING|MF_ENABLED,uidCmdFirst + id++, L"VISTA");
    AppendMenu(submenu, MF_STRING|MF_ENABLED,uidCmdFirst + id++, L"Win 7");

    InsertMenu(hmenu, 4,MF_BYPOSITION|MF_POPUP, UINT(submenu), L"Windows");
    SetMenuItemBitmaps(hmenu,id++, MF_BITMAP, hBitmap,hBitmap);


    return id;
}
4

2 回答 2

1

CreatePopUpMenu 也可以。您只需要使用 InsertMenu 而不是 AppendMenu。

于 2013-04-26T11:28:45.847 回答
1

阅读 SetMenuItemBitmap https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setmenuitembitmaps的定义没有 MF_BITMAP 标志之类的东西。

选项是 MF_BYCOMMAND 和 MF_BYPOSITION。似乎您正在尝试使用 MF_BYCOMMAND,但必须使用已赋予 MenuItens 的相同值。

您还必须检查 BITMAP 的格式。SetMenuItemBitmaps 只接受单色。我正在谷歌上做同样的事情并在这里取得了成功。谢谢你指路。

于 2018-08-15T00:29:56.380 回答