C ++:步骤1:ExtractIconEx。第2步: ???步骤3:SetMenuItemBitmaps

时间:2020-03-06 14:23:17  来源:igfitidea点击:

我正在尝试向外壳扩展中添加图标。我有这段代码(经过整理以便于阅读),可以正常工作:

InsertMenu(hmenu, index, MF_POPUP|MF_BYPOSITION, (UINT)hParentMenu, namestring);

下一步是此代码:

HICON hIconLarge, hIconSmall;
ICONINFO oIconInfo;
ExtractIconEx("c:\progra~1\winzip\winzip32.exe", 0, &hIconLarge, &hIconSmall, 1);
GetIconInfo(hIconSmall, &oIconInfo);
//???????
SetMenuItemBitmaps(hParentMenu, indexMenu-1, MF_BITMAP | MF_BYPOSITION, hbmp, hbmp);

我要用什么来代替?。尝试使用Google的这种知识发现了许多我无法使用的提示。任何有关使其正常工作的建议,尤其是在较旧的计算机上(例如,.net框架,无Vista)。

解决方案

Vista对菜单中的图标有适当的支持,对于Vista之前的版本,如果要使用真正的16x16全彩色图标,则必须使用所有者绘制菜单项(MF_OWNERDRAW)

Vista样式菜单...
Vista风格+ Vista之前的回调

尽管背面颜色为黑色而不是透明,但此方法可行。

GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);