[C con Clase] El ícono en el system tray no es el que defino

Steven Davidson steven en conclase.net
Vie Mar 2 05:43:21 CET 2007


Hola Diego,

El pasado 2007-03-01 20:40:07, D1e6o! escribió:

D> Hola amigos.. bueno... Perdón por molestar de nuevo... pero hay veces que no
D> se donde buscar... Y en este caso em estoy volviendo loco... Se trata de
D> íconos:
D> Probando con íconos intenté llevarlo al system tray, pero cuando lo hago no
D> tengo el ícono que quiero sino el ícono small que tiene la aplicación:
D> en winmain...
D>     wincl.hIcon  = LoadIcon(GetModuleHandle(NULL),
D> MAKEINTRESOURCE(ID_APICONO));
D>     wincl.hIconSm  = (HICON)LoadImage(GetModuleHandle(NULL),
D> MAKEINTRESOURCE(ID_SMICONO), IMAGE_ICON, 16, 16, 0);
D> y en alguna parte del winmain:
D>     MyTaskBarAddIcon (hwnd, ID_ICON, LoadIcon(GetModuleHandle(NULL),
D> MAKEINTRESOURCE(ID_ICONO)), "Prueba de íconos");

Sugiero usar 'LoadImage()' en lugar de la función obsoleta 'LoadIcon()'. Además, 'LoadIcon()' carga iconos de tamaño 'SM_CXICON' x 'SM_CYICON'. Como seguramente tienes iconos de diferentes tamaños, necesitarás ser explícito. En tu caso, escribirías,

wincl.hIcon    = (HICON) LoadImage( hThisInstance, MAKEINTRESOURCE(ID_APICONO),
                                    IMAGE_ICON, 32,32, 0);
wincl.hIconSm  = (HICON) LoadImage( hThisInstance, MAKEINTRESOURCE(ID_SMICONO),
                                    IMAGE_ICON, 16,16, 0);
...
MyTaskBarAddIcon( hwnd, ID_ICON,
                  (HICON) LoadImage( hThisInstance, MAKEINTRESOURCE(ID_ICONO),
                                     IMAGE_ICON, 16,16, 0),
                  "Prueba de iconos");

[CORTE]

D> Y si fuera por el tamaño, también probé:
D> MyTaskBarAddIcon (hwnd, ID_ICON,(HICON)LoadImage(GetModuleHandle(NULL),
D> MAKEINTRESOURCE(ID_SMICONO), IMAGE_ICON, 16, 16, 0) , "Prueba de íconos");
D> Y sigue siendo el mismo ícono el que aparece... No entiendo por que sucede

Prueba indicando explícitamente todos los tamaños de los iconos. Esto es lo que me pasó en mis pruebas.

D> esto... Y por otro lado...
D> Que es ID_ICON? Que valores puede tomar?

En tu ejemplo, 'ID_ICON' es asignado al miembro 'tnid.uID'. Este valor es un número entero que representa el icono y su funcionalidad en el área de estado de la barra de tareas - comúnmente llamada "bandeja del sistema".

El intérprete (o "shell") usa los miembros 'hWnd' y 'uID' para asociar e identificar la ventana y sus iconos para luego enviar los mensajes del ratón a tal ventana para tal icono identificado. Como es posible que una misma ventana puede crear varios iconos en este área, el intérprete necesita alguna forma de distinguirlos.

El valor de 'uID' puede ser cualquiera que diseñes.

D> Como puedo hacer para cambiar de íconos (ovbiamente una ves que funcione
D> esto)

Si te refieres a los iconos de la ventana, envía el mensaje 'WM_SETICON' a sí misma. La sintaxis es:

wParam = ICON_BIG ó ICON_SMALL
lParam = hIcono

Por ejemplo,

HICON hNuevoIcono;
...
SendMessage( hwnd, WM_SETICON, ICON_BIG, (LPARAM) hNuevoIcono );

D> Gracias a todos! (y muchas gracias steven que me sacás muchas dudas a
D> disrio!!!) Saludos!

Hago lo que puedo.


Espero que lo anterior te ayude.

Steven


Más información sobre la lista de distribución Cconclase