我使用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;
}
答案 0 :(得分:0)
CreatePopUpMenu也有效。您只需使用InsertMenu而不是AppendMenu。
答案 1 :(得分:0)
读取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仅接受单色。我正在谷歌上做同样的事情,并在这里取得了成功。感谢您的指导。