visual InsertMenu/AppendMenu - 如何使用C++和win32将图标添加到菜单和子菜单

visual InsertMenu/AppendMenu - How to add Icons to menu and submenus using C++ and win32

本文关键字:菜单 win32 图标 添加 C++ InsertMenu AppendMenu 何使用 visual      更新时间:2023-10-16

我使用 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;
}

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

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

选项是MF_BYCOMMAND和MF_BYPOSITION。 似乎您正在尝试使用MF_BYCOMMAND但必须使用已经提供给 MenuItens 的相同值。

您还必须检查位图的格式。SetMenuItemBitmaps只接受单色。我在谷歌上搜索做同样的事情,并在这里取得了成功。感谢您带路。