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.

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.