C ++: Pasul 1: ExtractIconEx. Pasul 2: ??? Pasul 3: SetMenuItemBitmaps

Experimentez adăugarea de pictograme la o extensie de shell. Am acest cod (dezinfectat pentru o lectură ușoară), care funcționează:

InsertMenu(hmenu, index, MF_POPUP|MF_BYPOSITION, (UINT)hParentMenu, namestring);

Următorul pas este acest cod:

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

Ce am pus pentru a înlocui? Încercările către Google aceste cunoștințe au găsit multe sfaturi pe care nu le-am reușit să lucrez. Orice consiliere cu privire la obținerea acestui lucru, în special pe mașini mai vechi (de exemplu, .net framework, no vista) este apreciată.

0

2 răspunsuri

Acest lucru funcționează, deși culoarea din spate este neagră în loc de transparență.

GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);
0
adăugat
Aparent, Windows face ceva inteligent pentru pictograma. Icoana origală a avut mai puțină transparență decât am crezut, dar Windows a decis să adauge o transparență ciudată. Acestea fiind spuse, codul de mai sus nu mai are nevoie de un bitmap care să fie desenat folosind drawicon între cele două etape.
adăugat autor Brian, sursa

Vista are suport adecvat pentru pictogramele din meniuri, pentru Vista, trebuie să utilizați elementele meniului draw-ului proprietarului (MF_OWNERDRAW) dacă doriți reale 16x16 icoane full color

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

0
adăugat
Această soluție necesită Windows XP și framework-ul .net. Doresc să evit amândouă.
adăugat autor Brian, sursa
Te-ai uitat la link-ul 2, are codul de lucru tot drumul inapoi la win95. Ideea este că, pentru orice Vista, trebuie să faceți chiar desenul, deci aveți libertatea de a alege dacă doriți să utilizați GDI, GDI + sau .Net
adăugat autor Anders, sursa