C ++: Шаг 1: ExtractIconEx. Шаг 2: ??? Шаг 3: SetMenuItemBitmaps - PullRequest
1 голос
/ 19 сентября 2008

Я экспериментирую с добавлением иконок в расширение оболочки. У меня есть этот код (санированный для легкого чтения), который работает:

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 Framework, нет Vista) приветствуется.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2008

Это работает, хотя задний цвет черный, а не прозрачный.

GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);
2 голосов
/ 19 сентября 2008

Vista имеет надлежащую поддержку значков в меню, для предварительной версии Vista вы должны использовать элементы меню рисования владельцем (MF_OWNERDRAW), если вам нужны реальные полноцветные значки 16x16

Меню в стиле Vista ... Стиль Vista + обратный вызов до Vista

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...