我正在尝试向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)都是值得赞赏的。
答案 0 :(得分:2)
Vista对菜单中的图标有适当的支持,对于Vista之前,如果你想要真正的16x16全彩图标,你必须使用所有者绘制菜单项(MF_OWNERDRAW)
答案 1 :(得分:2)
虽然背面的颜色是黑色而不是透明的,但这种方法很有效。
GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);