1

我正在尝试将图标添加到 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)都值得赞赏。

4

2 回答 2

2

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

Vista风格菜单... Vista风格+pre Vista回调

于 2008-09-18T20:22:25.777 回答
2

这可行,尽管背面颜色是黑色而不是透明。

GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);
于 2008-09-19T13:13:53.947 回答