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

时间:2008-09-18 20:13:02

标签: c++ winapi icons

我正在尝试向shell扩展添加图标。我有这个代码(清理易于阅读),有效:

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);

我应该用什么来代替?尝试谷歌这一知识已经找到许多我没能工作的提示。任何关于让它工作的建议,特别是在较旧的机器上(例如没有.net框架,没有vista)都是值得赞赏的。

2 个答案:

答案 0 :(得分:2)

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

Vista style menus... Vista style+pre Vista callback

答案 1 :(得分:2)

虽然背面的颜色是黑色而不是透明的,但这种方法很有效。

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