Tema | TrayIcon | Versión | 1.00 |
Resumen | El siguiente documento explica la forma de insertar un ícono en la barra del Explorador (TrayIcon). Asimismo indica la forma de recibir los que éste produce. | ||
Sistema Operativo | WINDOWS 9x, Me, NT, 2000, XP | ||
Autor | Andrés A. Veiga | Fecha | 18/8/2001 |
Búsqueda | Icono – TrayIcon – IconTray – Tray – Icono – Ícono – Explorer – Explorador |
1) Estructura de datos:
La estructura NOTIFYICONDATA permite especificar toda la información asociada a este tipo de íconos. Esta estructura posee los siguientes campos:
CbSize: Debe contener el tamaño de la estructura. Debe ser sizeof (NOTIFYICONDATA).
hWnd: Handle de la ventana a la que se le deben pasar los mensajes de notificación. Sólo se le pasan los mensajes en el caso en que se especifique el flag NIF_MESSAGE en el campo UFlags.
uID: Identificador del ícono. Debe ser un número único.
uFlags: Indica las características del ícono a insertar. Se debe utilizar alguna combinación de las siguientes constantes:
NIF_MESSAGE: Indica que, cuando se produzca algún evento, se debe enviar el mensaje indicado en UcallBackMessage a la ventana especificada en hWnd.
NIF_ICON: Idica que el campo hIcon tiene el handle del ícono a mostrar.
NIF_TIP: Indica que cuando el usuario señale el ícono, se deberá deplegar un tooltip con el texto indicado en szTip`.
uCallbackMessage: Mensaje que se desea recibir. Sólo es válido si se especificó el flag NIF_MESSAGE en uflags.
hIcon: hICON del ícono a mostrar. Sólo es válido si se especificó el flag NIF_ICON en Uflags.
szTip: Buffer de 64 caracteres que contiene el ‘tootip’. Sólo es válido si se especificó el flag NIF_TIP en uflags.
2) Creación, Modificación, Borrado:
Toda operación relacionada con los íconos de la barra del Explorador se hace mediante la función: Shell_NotifyIcon (DWORD dwMessage, PNOTIFYICONDATA pnid). Esta función toma como primer parámetro el tipo de operación que se desea realizar. Este parámetro puede tomar alguno de los siguientes valores: NIM_ADD (agregar), NIM_MODIFY (modificar) o NIM_DELETE (borrar). El segundo parámetro es la dirección de memoria de la estructura NOTIFYICONDATA que contiene los datos necesarios para la operación.
3) Recepción de notificaciones:
Cada vez que se produzca un evento WINDOWS notificará a la ventana especificada enviándole el mensaje especificado. El campo wParam contendrá el Identificador del ícono que generó el mensaje (sólo sirve para el caso de ventanas que insertan más de un ícono en la barra) .El parámetro lParam tendrá el evento generado por el mouse. Por ejemplo, si el mouse se posicionó sobre el ícono, lParam tendrá el valor WM_MOUSEMOVE.
4) Ejemplo:
La siguiente es una porción de código típica para agregar un ícono en la barra del Explorador.
BOOL MyTaskBarAddIcon (HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip)
{
BOOL res;
NOTIFYICONDATA tnid;
/* Cargo la estructura con los datos */
tnid.cbSize = sizeof (NOTIFYICONDATA);
tnid.hWnd = hwnd;
tnid.uID = uID;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = MYWM_NOTIFYICON;
tnid.hIcon = hicon;
if (lpszTip)
lstrcpyn (tnid.szTip, lpszTip, sizeof(tnid.szTip));
else
tnid.szTip[0] = '\0';
/* Le pido al EXPLORER que agregue el ícono */
res = Shell_NotifyIcon (NIM_ADD, &tnid);
return res;
}