C++:Paso 1:ExtraerIconEx.Paso 2:???Paso 3:EstablecerMenuItemBitmaps
Pregunta
Estoy experimentando agregando íconos a una extensión de shell.Tengo este código (desinfectado para facilitar la lectura), que funciona:
InsertMenu(hmenu, index, MF_POPUP|MF_BYPOSITION, (UINT)hParentMenu, namestring);
El siguiente paso es este código:
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é pongo para reemplazar las?Los intentos de buscar en Google este conocimiento han encontrado muchos consejos que no logré hacer funcionar.¿Algún consejo para hacer que esto funcione, especialmente en máquinas más antiguas (p. ej.no se aprecia .net framework, ni vista).
Solución 2
Esto funciona, aunque el color de fondo es negro en lugar de transparente.
GetIconInfo(hIconSmall, &oIconInfo);
SetMenuItemBitmaps(hmenu, uMenuIndex+i+popUpMenuCount-1, MF_BITMAP | MF_BYPOSITION, oIconInfo.hbmColor, oIconInfo.hbmColor);
Otros consejos
Vista tiene soporte adecuado para íconos en menús, para Vista anterior, debe usar elementos de menú de dibujo del propietario (MF_OWNERDRAW) si desea íconos reales a todo color de 16x16
Menús estilo Vista... Estilo Vista+devolución de llamada previa a Vista