Barra delle applicazioni
L'interfaccia di Windows include una barra degli strumenti desktop dell'applicazione speciale denominata barra delle applicazioni. È possibile usare la barra delle applicazioni per attività quali il passaggio tra finestre aperte e l'avvio di nuove applicazioni.
Nota
Per informazioni sulle modifiche apportate alla barra delle applicazioni a partire da Windows 7, vedere Estensioni della barra delle applicazioni.
In questo argomento sono contenute le sezioni seguenti.
La barra delle applicazioni include quanto segue:
- Menu Start
- Barra di avvio veloce (solo Windows Vista e versioni precedenti)
- Pulsanti della barra delle applicazioni
- Barre degli strumenti (facoltativo)
- Area delle notifiche
Il menu Start contiene comandi che possono accedere a programmi, documenti e impostazioni. Questi comandi includono Tutti i programmi, Documenti, Pannello di controllo, Giochi, Guida e Supporto tecnico, Arresta e cerca programmi e file.
La schermata Start nelle versioni precedenti di Windows conteneva elementi come Trova ed Esegui, la funzionalità di cui è stata inclusa nei programmi e nei file di ricerca in Windows Vista e versioni successive.
La barra di avvio veloce, disponibile nelle versioni di Windows precedenti a Windows 7, contiene collegamenti alle applicazioni. Windows fornisce voci predefinite, ad esempio Windows Internet Explorer, e l'utente può aggiungere eventuali altri collegamenti scelti. Le icone in questa area rispondono a un singolo clic. In Windows 7 e versioni successive questa funzionalità è inclusa nei pulsanti della barra delle applicazioni.
Shell posiziona un pulsante sulla barra delle applicazioni ogni volta che un'applicazione crea una finestra non visualizzata, ovvero una finestra che non ha un elemento padre e che ha i bit di stile estesi appropriati (vedere Gestione dei pulsanti della barra delle applicazioni, di seguito). Per passare a una finestra, l'utente fa clic sul pulsante della finestra. Questa funzionalità è stata notevolmente ampliata a partire da Windows 7. Per altre informazioni, vedere Estensioni della barra delle applicazioni.
Le applicazioni possono inserire icone nell'area di notifica per indicare lo stato di un'operazione o per notificare all'utente un evento. Ad esempio, un'applicazione potrebbe inserire un'icona della stampante nell'area di notifica per indicare che è in corso un processo di stampa. Tuttavia, in Windows 7 e versioni successive, alcune delle informazioni fornite in precedenza dall'area di notifica devono essere fornite tramite il pulsante della barra delle applicazioni di un'applicazione. L'area di notifica si trova al bordo destro della barra delle applicazioni (se la barra delle applicazioni è orizzontale) o nella parte inferiore (se la barra delle applicazioni è verticale). Per altre informazioni, vedere Notifiche e area di notifica.
L'area di notifica visualizza anche l'ora corrente se questa opzione è selezionata. L'opzione è disponibile come segue:
- Windows 7 e versioni successive: elenco a discesa Orologio nella pagina Attiva o disattiva le icone di sistema dell'applicazione Icone area di notifica Pannello di controllo applicazione (accessibile anche tramite le proprietà dell'area di notifica).
- Windows Vista: casella di controllo Orologio nella pagina Area di notifica della finestra delle proprietà della barra delle applicazioni e del menu Start .
- Windows XP: la casella di controllo Mostra l'orologio nella barra delle applicazioni e nella finestra delle proprietà del menu Start .
L'utente può fare clic con il pulsante destro del mouse sulla barra delle applicazioni per visualizzare il menu di scelta rapida. Il menu di scelta rapida include comandi per le finestre a catena, le finestre dello stack, visualizzare le finestre affiancate, visualizzare il desktop, avviare Gestione attività e impostare le proprietà della barra delle applicazioni. Il menu di scelta rapida offre anche la possibilità di aggiungere o rimuovere un set di barre degli strumenti dalla barra delle applicazioni. È possibile aggiungere nuove barre degli strumenti a questo menu registrandole nella categoria CATID_DeskBand. Per altre informazioni, vedere Implementazione di oggetti band. Si noti che a partire da Windows 7, la barra delle applicazioni e l'area di notifica hanno menu di scelta rapida separati. Questi menu di scelta rapida condividono alcune opzioni, ad esempio la disposizione delle finestre e aggiungono altre.
La barra delle applicazioni supporta due opzioni di visualizzazione: Nascondi automaticamente e, in Windows Vista e versioni precedenti, Always On Top (la barra delle applicazioni è sempre in questa modalità in Windows 7 e versioni successive). Per impostare queste opzioni, l'utente deve aprire il menu di scelta rapida della barra delle applicazioni, fare clic su Proprietà e selezionare o deselezionare la casella di controllo Nascondi automaticamente la barra delle applicazioni o la casella di controllo Mantieni la barra delle applicazioni in cima ad altre finestre . Per recuperare lo stato di queste opzioni di visualizzazione, usare il messaggio ABM_GETSTATE . Se si desidera ricevere una notifica quando cambia lo stato di queste opzioni di visualizzazione, elaborare il messaggio di notifica ABN_STATECHANGE nella procedura della finestra. Per modificare lo stato di queste opzioni di visualizzazione, usare il messaggio ABM_SETSTATE .
L'area di lavoro è la parte dello schermo non nascosta dalla barra delle applicazioni. Per recuperare le dimensioni dell'area di lavoro, chiamare la funzione SystemParametersInfo con il valore SPI_GETWORKAREA impostato. Per recuperare le coordinate del rettangolo che descrivono la posizione della barra delle applicazioni, utilizzare il messaggio ABM_GETTASKBARPOS .
È possibile coprire la barra delle applicazioni impostando in modo esplicito le dimensioni del rettangolo di finestra uguale alle dimensioni dello schermo con SetWindowPos. Per i sistemi Windows 2000 o versioni successive, la finestra deve non contenere WS_CAPTION o WS_THICKFRAME, altrimenti la finestra deve essere ridimensionata in modo che l'area client copre l'intero schermo. Inoltre, in particolare per questi sistemi, se la barra delle applicazioni è impostata su Always On Top, rimarrà nascosta solo mentre l'applicazione è l'applicazione in primo piano.
Per aggiungere un elemento al sottomenu Programmi in Microsoft Windows NT 4.0, Windows 2000 e versioni successive o Windows 95 o versioni successive, seguire questa procedura.
- Creare un collegamento alla shell usando l'interfaccia IShellLink .
- Ottenere il PIDL della cartella Programmi usando SHGetSpecialFolderLocation, passando CSIDL_PROGRAMS.
- Aggiungere il collegamento Shell alla cartella Programmi. È anche possibile creare una cartella nella cartella Programmi e aggiungere il collegamento a tale cartella.
Shell crea un pulsante sulla barra delle applicazioni ogni volta che un'applicazione crea una finestra che non è di proprietà. Per assicurarsi che il pulsante della finestra sia posizionato sulla barra delle applicazioni, creare una finestra non visualizzata con lo stile esteso WS_EX_APPWINDOW . Per evitare che il pulsante della finestra venga posizionato sulla barra delle applicazioni, creare la finestra non visualizzata con lo stile esteso WS_EX_TOOLWINDOW . In alternativa, è possibile creare una finestra nascosta e rendere questa finestra nascosta il proprietario della finestra visibile.
Shell rimuove il pulsante di una finestra dalla barra delle applicazioni solo se lo stile della finestra supporta i pulsanti visibili della barra delle applicazioni. Se si desidera modificare in modo dinamico lo stile di una finestra in uno che non supporta i pulsanti della barra delle applicazioni visibili, è necessario nascondere prima la finestra (chiamando ShowWindow con SW_HIDE), modificare lo stile della finestra e quindi visualizzare la finestra.
Il pulsante della finestra contiene in genere l'icona e il titolo dell'applicazione. Tuttavia, se l'applicazione non contiene un menu di sistema, il pulsante della finestra viene creato senza l'icona.
Se si vuole che l'applicazione abbia l'attenzione dell'utente quando la finestra non è attiva, usare la funzione FlashWindow per informare l'utente che un messaggio è in attesa. Questa funzione lampeggia il pulsante della finestra. Quando l'utente fa clic sul pulsante della finestra per attivare la finestra, l'applicazione può visualizzare il messaggio.
La versione 4.71 e successive di Shell32.dll aggiunge la funzionalità per modificare il contenuto della barra delle applicazioni. Da un'applicazione è ora possibile aggiungere, rimuovere e attivare i pulsanti della barra delle applicazioni. L'attivazione dell'elemento non attiva la finestra; mostra l'elemento premuto sulla barra delle applicazioni.
Le funzionalità di modifica della barra delle applicazioni vengono implementate in un oggetto COM (Component Object Model) (CLSID_TaskbarList ) che espone l'interfaccia ITaskbarList (IID_ITaskbarList). Per inizializzare l'oggetto, è necessario chiamare il metodo ITaskbarList::HrInit . È quindi possibile usare i metodi dell'interfaccia ITaskbarList per modificare il contenuto della barra delle applicazioni.
Usare la funzione Shell_NotifyIcon per aggiungere, modificare o eliminare icone dall'area di notifica. Il parametro dwMessage di Shell_NotifyIcon è un messaggio alla barra delle applicazioni che specifica l'azione da eseguire. Il parametro pnid è un puntatore a una struttura NOTIFYICONDATA usata per identificare l'icona e passare eventuali informazioni aggiuntive necessarie per l'elaborazione del messaggio da parte del sistema.
È possibile eseguire le azioni seguenti con le icone dell'area di notifica.
- Per aggiungere un'icona all'area di notifica della barra delle applicazioni, chiamare Shell_NotifyIcon con il parametro dwMessage impostato su NIM_ADD. La struttura NOTIFYICONDATA viene utilizzata per specificare l'handle e l'identificatore dell'icona e qualsiasi testo della descrizione comando. Se l'utente ha selezionato la casella di controllo Mostra orologio nelle proprietà della barra delle applicazioni, il sistema posiziona l'icona a sinistra immediata dell'orologio. In caso contrario, l'icona viene visualizzata sul lato destro o nella parte inferiore della barra delle applicazioni. Tutte le icone esistenti vengono spostate a sinistra per fare spazio alla nuova icona.
- Per modificare le informazioni di un'icona, inclusi l'handle dell'icona, il testo della descrizione comando e l'identificatore del messaggio di callback, chiamare Shell_NotifyIcon con dwMessage impostato su NIM_MODIFY.
- Per eliminare un'icona dall'area di notifica, chiamare Shell_NotifyIcon con il parametro dwMessage impostato su NIM_DELETE.
Al termine di un'operazione dell'interfaccia utente, restituire lo stato attivo all'area di notifica chiamando Shell_NotifyIcon con dwMessage impostato su NIM_SETFOCUS. Ad esempio, è possibile eseguire questa operazione quando un'icona della barra delle applicazioni visualizza un menu di scelta rapida, ma l'utente lo annulla premendo il tasto ESCAPE.
Le applicazioni in genere inseriscono le icone nell'area di notifica della barra delle applicazioni per fungere da indicatori di stato. È possibile fornire informazioni aggiuntive quando l'utente esegue azioni del mouse, ad esempio spostando il puntatore del mouse sull'icona o facendo clic sull'icona.
Il sistema notifica gli eventi del mouse e della tastiera inviando un messaggio di callback definito dall'applicazione associato a un'icona specifica. In questo modo, il sistema può inviare una notifica a un'applicazione quando l'utente, ad esempio, fa clic sull'icona o lo seleziona premendo un tasto.
Quando si aggiunge l'icona alla barra delle applicazioni, si definisce il messaggio di callback di un'icona. L'identificatore del messaggio di callback viene specificato nel membro uCallbackMessage della struttura NOTIFYICONDATA passata con NIM_ADD. Quando si verifica un evento, il sistema invia il messaggio di callback alla procedura di finestra della finestra specificata dal membro hWnd . Il parametro wParam del messaggio contiene l'identificatore dell'icona della barra delle applicazioni in cui si è verificato l'evento. Il parametro lParam contiene il messaggio del mouse o della tastiera associato all'evento. Ad esempio, quando il puntatore del mouse si sposta su un'icona della barra delle applicazioni, lParam contiene WM_MOUSEMOVE.
I risultati di vari eventi del mouse possono essere riepilogati come segue:
- Quando l'utente sposta il puntatore del mouse sull'icona, il sistema visualizza il testo della descrizione comando specificato in NOTIFYICONDATA.
- Quando l'utente fa clic sull'icona, l'applicazione riceve una notifica WM_LBUTTONDOWN .
- Quando l'utente fa clic con il pulsante destro del mouse sull'icona, l'applicazione riceve una notifica WM_RBUTTONDOWN .
- Quando l'utente fa doppio clic sull'icona, l'applicazione riceve una notifica di WM_LBUTTONDBLCLK .
In genere, facendo clic sull'icona l'applicazione viene visualizzata una finestra con informazioni aggiuntive, facendo clic con il pulsante destro del mouse viene visualizzato un menu di scelta rapida e facendo doppio clic viene eseguito il comando di menu di scelta rapida predefinito.
Per un esempio di come modificare il testo della descrizione comando associato a un'icona dell'area di notifica, vedere Descrizioni comandi per le icone della barra di stato.
Versioni 5.0 e successive dell'handle shell Shell_NotifyIcon eventi del mouse e della tastiera in modi diversi rispetto alle versioni precedenti di Shell trovate in Windows NT 4.0, Windows 95 e Windows 98. Le differenze sono le seguenti:
- Se un utente richiede un menu di scelta rapida dell'icona di notifica con la tastiera, shell versione 5.0 invia all'applicazione associata un messaggio di WM_CONTEXTMENU . Le versioni precedenti inviano messaggi di WM_RBUTTONDOWN e WM_RBUTTONUP .
- Se un utente seleziona un'icona di notifica con la tastiera e la attiva con la barra dello spazio o il tasto INVIO, la shell versione 5.0 invia all'applicazione associata una notifica NIN_KEYSELECT . Le versioni precedenti inviano messaggi di WM_RBUTTONDOWN e WM_RBUTTONUP .
- Se un utente seleziona un'icona di notifica con il mouse e la attiva con la chiave INVIO, la shell versione 5.0 invia all'applicazione associata una notifica NIN_SELECT . Le versioni precedenti inviano messaggi di WM_RBUTTONDOWN e WM_RBUTTONUP .
- Se un utente passa il puntatore del mouse su un'icona con cui è associata una descrizione comando a forma di palloncino, la shell 6.0 (Windows XP) invia i messaggi seguenti.
-
- NIN_BALLOONSHOW - Inviato quando viene visualizzato il palloncino (i palloncini vengono accodati).
- NIN_BALLOONHIDE - Inviato quando il palloncino scompare, ad esempio quando l'icona viene eliminata. Questo messaggio non viene inviato se il palloncino viene ignorato a causa di un timeout o di un clic del mouse.
- NIN_BALLOONTIMEOUT - Inviato quando il palloncino viene ignorato a causa di un timeout.
- NIN_BALLOONUSERCLICK - Inviato quando il palloncino viene ignorato a causa di un clic del mouse.
-
È possibile selezionare il modo in cui shell deve comportarsi chiamando Shell_NotifyIcon con dwMessage impostato su NIM_SETVERSION. Impostare il membro uVersion della struttura NOTIFYICONDATA per indicare se si vuole il comportamento della versione 5.0 o precedente alla versione 5.0.
Con Microsoft Internet Explorer 4.0 e versioni successive, shell notifica che la barra delle applicazioni è stata creata. Quando viene creata la barra delle applicazioni, registra un messaggio con la stringa TaskbarCreated e quindi trasmette questo messaggio a tutte le finestre di primo livello. Quando l'applicazione della barra delle applicazioni riceve questo messaggio, si presuppone che tutte le icone della barra delle applicazioni aggiunte siano state rimosse e aggiunte di nuovo. Questa funzionalità si applica in genere solo ai servizi già in esecuzione quando viene avviata la Shell. Nell'esempio seguente viene illustrato un metodo molto semplificato per la gestione di questo caso.
In Windows 10, la barra delle applicazioni trasmette anche questo messaggio quando viene modificato il valore DPI della visualizzazione primaria.
LRESULT CALLBACK WndProc(HWND hWnd,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
static UINT s_uTaskbarRestart;
switch(uMessage)
{
case WM_CREATE:
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
break;
default:
if(uMessage == s_uTaskbarRestart)
AddTaskbarIcons();
break;
}
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
Questa sezione include esempi che illustrano come aggiungere icone all'area di notifica della barra delle applicazioni e come elaborare i messaggi di callback per le icone della barra delle applicazioni.
Si aggiunge un'icona all'area di notifica della barra delle applicazioni inserendo una struttura NOTIFYICONDATA e quindi passando la struttura a Shell_NotifyIcon con dwMessage impostata su NIM_ADD. I membri della struttura devono specificare l'handle nella finestra che aggiunge l'icona, nonché l'identificatore dell'icona e l'handle dell'icona. È anche possibile specificare il testo della descrizione comando per l'icona. Se è necessario ricevere messaggi del mouse per l'icona, specificare l'identificatore del messaggio di callback usato dal sistema per inviare il messaggio alla routine della finestra.
La funzione nell'esempio seguente illustra come aggiungere un'icona alla barra delle applicazioni.
// MyTaskBarAddIcon - adds an icon to the notification area.
// Returns TRUE if successful, or FALSE otherwise.
// hwnd - handle to the window to receive callback messages
// uID - identifier of the icon
// hicon - handle to the icon to add
// lpszTip - tooltip text
BOOL MyTaskBarAddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip)
{
BOOL res;
NOTIFYICONDATA tnid;
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)
hr = StringCbCopyN(tnid.szTip, sizeof(tnid.szTip), lpszTip,
sizeof(tnid.szTip));
// TODO: Add error handling for the HRESULT.
else
tnid.szTip[0] = (TCHAR)'\0';
res = Shell_NotifyIcon(NIM_ADD, &tnid);
if (hicon)
DestroyIcon(hicon);
return res;
}
Per eliminare un'icona dall'area di notifica della barra delle applicazioni, compilare una struttura NOTIFYICONDATA e chiamare Shell_NotifyIcon con dwMessage impostata su NIM_DELETE. Quando si elimina un'icona della barra delle applicazioni, specificare solo i membri cbSize, hWnd e uID della struttura. Ad esempio:
// MyTaskBarDeleteIcon - deletes an icon from the notification area.
// Returns TRUE if successful, or FALSE otherwise.
// hwnd - handle to the window that added the icon.
// uID - identifier of the icon to delete.
BOOL MyTaskBarDeleteIcon(HWND hwnd, UINT uID)
{
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = hwnd;
tnid.uID = uID;
res = Shell_NotifyIcon(NIM_DELETE, &tnid);
return res;
}
Se si specifica un messaggio di callback per un'icona della barra delle applicazioni, il sistema invia il messaggio all'applicazione ogni volta che si verifica un evento del mouse nel rettangolo di selezione dell'icona. Il parametro wParam del messaggio specifica l'identificatore dell'icona della barra delle applicazioni e il parametro lParam del messaggio specifica il messaggio generato dal sistema in seguito all'evento del mouse.
La funzione nell'esempio seguente è da un'applicazione che aggiunge icone della batteria e della stampante alla barra delle applicazioni. L'applicazione chiama la funzione quando riceve un messaggio di callback. La funzione determina se l'utente ha fatto clic su una delle icone e, se si è verificato un clic, chiama una funzione definita dall'applicazione per visualizzare le informazioni sullo stato.
// On_MYWM_NOTIFYICON - processes callback messages for taskbar icons.
// wParam - first message parameter of the callback message.
// lParam - second message parameter of the callback message.
void On_MYWM_NOTIFYICON(WPARAM wParam, LPARAM lParam)
{
UINT uID;
UINT uMouseMsg;
uID = (UINT) wParam;
uMouseMsg = (UINT) lParam;
if (uMouseMsg == WM_LBUTTONDOWN)
{
switch (uID)
{
case IDI_MYBATTERYICON:
// The user clicked the battery icon. Display the
// battery status.
ShowBatteryStatus();
break;
case IDI_MYPRINTERICON:
// The user clicked the printer icon. Display the
// status of the print job.
ShowJobStatus();
break;
default:
break;
}
}
return;
}