C ++: Étape 1: ExtractIconEx. Étape 2: ??? Étape 3: SetMenuItemBitmaps
Question
J'essaie d'ajouter des icônes à une extension du shell. J'ai ce code (désinfecté pour une lecture facile), qui fonctionne:
InsertMenu(hmenu, index, MF_POPUP|MF_BYPOSITION, (UINT)hParentMenu, namestring);
L'étape suivante est le code suivant:
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);
Qu'est-ce que je mets pour remplacer les? Les tentatives de Google sur cette connaissance ont permis de trouver de nombreux conseils que je n’ai pas réussi à faire fonctionner. Tous les conseils pour que cela fonctionne, en particulier sur les anciennes machines (par exemple, pas de framework .net, pas de vista) sont appréciés.
La solution 2
Cela fonctionne, même si la couleur de fond est noire au lieu de transparente.
GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);
Autres conseils
Vista prend correctement en charge les icônes dans les menus. Pour les versions antérieures à Vista, vous devez utiliser les éléments de menu de dessin du propriétaire (MF_OWNERDRAW) si vous voulez de véritables icônes 16 x 16 en couleur
Menus de style Vista ... style Vista + rappel antérieur à Vista