Come Inserire Icone nell’Area di Notifica

L’area di notifica risiede sulla destra della barra principale nel desktop di Windows, dove di solito appaiono le icone di programmi che risiedono in memoria, ma anche l’ora e la lingua della tastiera.

Area di Notifica

Area di notifica del sistema operativo Windows

Per personalizzare le icone visibili possiamo aprire le proprietà della barra e scegliere Area di notifica. In questo articolo vedremo come registrare un’icona in quell’area, si tratta di un compito abbastanza semplice, qui faremo un esempio pratico in C++.
Per inserire un’icona nell’area di notifica di Windows occorre utilizzare una funzione, Shell_NotifyIcon, che presenta come argomento una struttura, NOTIFYICONDATA. Passiamo subito a vedere le variabili che compongono questa struttura:

  • cbSize – tipo: DWORD – La grandezza della struttura in bytes.
  • hWnd – tipo: HWND – L’handle della finestra che riceve la notifica associata all’icona nell’area di notifica.
  • uID – tipo: UINT – L’identificatore della risorsa, che in questo caso è la nostra icona.
  • uCallbackMessage – tipo: UINT – Una funzione callback per gestire i messaggi di notifica dai movimenti del mouse alla tastiera ed altro, il messaggio risiede in LPARAM.
  • hIcon – tipo: HICON – L’handle dell’icona da aggiungere, da Windows XP in poi può essere anche a 32 bit per pixel.
  • szTip – tipo: TCHAR[64] – Stringa terminata dal carattere nullo di 64 caratteri per il testo del tooltip standard.
  • dwState – tipo: DWORD – Lo stato dell’icona e può essere: NIS_HIDDEN per nasconderla o NIS_SHAREDICON per condividere la risorsa tra più icone.
  • dwStateMask – tipo: DWORD – Determina quale valore è valido per lo stato dell’icona, ad esempio con NIS_HIDDEN si può modificare solo lo stato nascosto dell’icona.
  • szInfo – tipo: TCHAR[256] – Il messaggio da visualizzare nel tooltip balloon.
  • uVersion – tipo: UINT – Valore da assegnare per avere vari tipi di interfacce grafiche e comportamenti del tooltip, in particolare: zero per applicazioni precedenti a Windows 2000, NOTIFYICON_VERSION per Windows 2000 fino a Windows XP e NOTIFYICON_VERSION_4 per Windows Vista o superiori.
  • szInfoTitle – tipo: TCHAR[64] – Stringa per il testo del tooltip balloon.
  • uFlags – tipo: UINT – Valore che indica i membri validi della struttura ed in particolare: NIF_MESSAGE per il membro uCallbackMessage, NIF_ICON per hIcon, NIF_TIP per szTip, NIF_STATE per dwState e dwStateMask, NIF_INFO per i nuovi tooltip balloon, NIF_GUID per guidItem ( solo in Windows 7 ).
  • dwInfoFlags – tipo DWORD
  • guidItem – tipo: GUID
  • hBalloonIcon – tipo HICON

Per informazioni complete sulla struttura potete leggere l’aiuto in linea di Microsoft per il Windows SDK ( in lingua Inglese). Vediamo un semplice esempio in C++ per mostrare un’icona nell’area di notifica, il codice va inserito dopo che l’applicazione è stata creata, quindi in MFC va inserita nella funzione InitInstance.

...
NOTIFYICONDATA nid;
ZeroMemory(&nid, sizeof(NOTIFYICONDATA));
nid.cbSize = NOTIFYICONDATA_V2_SIZE;
nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE;
wcscpy_s(nid.szTip, _T("La mia notifica"));
nid.hWnd = m_pMainWnd->m_hWnd;
nid.uCallbackMessage = WM_MYNOTIFY;
nid.hIcon = LoadIcon(MYICON);
Shell_NotifyIcon(NIM_ADD, &nid);

ZeroMemory(&nid, sizeof(NOTIFYICONDATA));
nid.cbSize = NOTIFYICONDATA_V2_SIZE;
nid.hWnd = m_pMainWnd->m_hWnd;
nid.uVersion = NOTIFYICON_VERSION;
Shell_NotifyIcon(NIM_SETVERSION, &nid);
...
Shell_NotifyIcon(NIM_DELETE, &nid);
...

Come potete notare occorre inserire la finestra a cui far arrivare le notifiche, il messaggio e l’icona, quindi inserire il tutto con NIM_ADD,  NIM_SETVERSION serve per abilitare i nuovi tipi di tooltip, altro comando che si può dare è NIM_MODIFY per modificare i valori dei membri della struttura. Quando terminato occorre eliminare l’icona dall’area di notifica con NIM_DELETE.
Diamo ora uno sguardo al messaggio WM_MYNOTIFY da intercettare nel ciclo dei messaggi della finestra principale dell’applicazione:

...
switch (lParam)
{
case WM_RBUTTONDOWN:
	// di solito si mostra il menu dei comandi
	break;
case WM_LBUTTONDBLCLK:
	// di solito si compie il comando di default
	break;
case NIN_BALLOONTIMEOUT:
       // operazione fatta ogni tot tempo
	break;
case NIN_BALLOONSHOW:
	// quando appare il tooltip balloon
	break;
case NIN_BALLOONHIDE:
	// quando scompare il tooltip balloon
	break;
case NIN_BALLOONUSERCLICK:
	// quando l'utente fa clic sul tooltip balloon
	break;
}
...

Come potete vedere non è molto complicato gestire le icone nell’area di notifica, se avete bisogno di altre informazioni non esitate a chiedere.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Programmazione, VC/C++, Windows e contrassegnata con . Contrassegna il permalink.