Barre di stato (controlli Windows)

Una barra di stato è una finestra orizzontale nella parte inferiore di una finestra padre in cui un'applicazione può visualizzare vari tipi di informazioni sullo stato. La barra di stato può essere suddivisa in parti per visualizzare più tipi di informazioni. La schermata seguente mostra la barra di stato nell'applicazione Microsoft Windows Paint. In questo caso, la barra di stato contiene il testo "Per la Guida, fare clic su Argomenti della Guida nel menu ? ". La barra di stato è l'area nella parte inferiore della finestra che contiene il testo della Guida e le informazioni sulle coordinate.

screen shot of the paint application, with a status bar that contains hints about online help

Questa sezione include gli argomenti seguenti.

Tipi e stili

La posizione predefinita di una barra di stato si trova nella parte inferiore della finestra padre, ma è possibile specificare lo stile CCS_TOP in modo che venga visualizzato nella parte superiore dell'area client della finestra padre.

È possibile specificare lo stile SBARS_SIZEGRIP per includere un grip di ridimensionamento alla fine destra della barra di stato.

Nota

Non è consigliabile combinare gli stili CCS_TOP e SBARS_SIZEGRIP perché il grip di ridimensionamento risultante non è funzionale.

 

Dimensioni e altezza

La procedura della finestra per la barra di stato imposta automaticamente le dimensioni iniziali e la posizione della finestra, ignorando i valori specificati nella funzione CreateWindowEx. La larghezza corrisponde a quella dell'area client della finestra padre. L'altezza si basa sulle metriche del tipo di carattere attualmente selezionato nel contesto di dispositivo della barra di stato e sulla larghezza dei bordi della finestra.

La procedura della finestra regola automaticamente le dimensioni della barra di stato ogni volta che riceve un messaggio di WM_SIZE. In genere, quando cambiano le dimensioni della finestra padre, l'elemento padre invia un messaggio WM_SIZE alla barra di stato.

Un'applicazione può impostare l'altezza minima dell'area di disegno di una barra di stato inviando alla finestra un messaggio SB_edizione Standard TMINHEIGHT, specificando l'altezza minima, in pixel. L'area di disegno non include i bordi della finestra. Un'altezza minima è utile per disegnare in una barra di stato disegnata dal proprietario. Per altre informazioni, vedere Barre di stato disegnate dal proprietario più avanti in questo capitolo.

Per recuperare le larghezze dei bordi di una barra di stato, inviare alla finestra un messaggio di SB_GETBORDERS . Il messaggio include l'indirizzo di una matrice a tre elementi che riceve le larghezze.

Barre di stato di più parti

Una barra di stato può avere molte parti diverse, ognuna con una riga di testo diversa. Si divide una barra di stato in parti inviando alla finestra un messaggio SB_edizione Standard TPARTS, specificando il numero di parti da creare e l'indirizzo di una matrice integer. La matrice contiene un elemento per ogni parte e ogni elemento specifica la coordinata client del bordo destro di una parte.

Una barra di stato può avere un massimo di 256 parti, anche se le applicazioni in genere usano molto meno di quella. È possibile recuperare un conteggio delle parti in una barra di stato, nonché la coordinata del bordo destro di ogni parte, inviando alla finestra un messaggio SB_GETPARTS.

Operazioni di testo barra di stato

È possibile impostare il testo di qualsiasi parte di una barra di stato inviando il messaggio SB_edizione Standard TTEXT, specificando l'indice in base zero di una parte, un indirizzo della stringa da disegnare nella parte e la tecnica per disegnare la stringa. La tecnica di disegno determina se il testo ha un bordo e, in caso affermativo, lo stile del bordo. Determina inoltre se la finestra padre è responsabile del disegno del testo. Per altre informazioni, vedere la sezione Barre di stato disegnate dal proprietario di seguito.

Per impostazione predefinita, il testo è allineato a sinistra all'interno della parte specificata di una barra di stato. È possibile incorporare caratteri di tabulazione (\ t) nel testo al centro o allinearlo a destra. Il testo a destra di un singolo carattere di tabulazioni è centrato e il testo a destra di un secondo carattere di tabulazioni è allineato a destra.

Per recuperare testo da una barra di stato, usare i messaggi SB_GETTEXTLENGTH e SB_GETTEXT.

Se l'applicazione usa una barra di stato con una sola parte, è possibile usare i messaggi WM_edizione Standard TTEXT, WM_GETTEXT e WM_GETTEXTLENGTH per eseguire operazioni di testo. Questi messaggi gestiscono solo la parte con un indice pari a zero, consentendo di gestire la barra di stato in modo molto simile a un controllo di testo statico.

Per visualizzare una linea di stato senza creare una barra di stato, utilizzare la funzione DrawStatusText. La funzione usa le stesse tecniche per disegnare lo stato della routine della finestra per la barra di stato, ma non imposta automaticamente le dimensioni e la posizione delle informazioni sullo stato. Quando si chiama la funzione, è necessario specificare le dimensioni e la posizione delle informazioni sullo stato, nonché il contesto del dispositivo della finestra in cui disegnare.

Barre di stato disegnate dal proprietario

È possibile definire singole parti di una barra di stato come parti disegnate dal proprietario. L'uso di questa tecnica offre un maggiore controllo rispetto all'aspetto della parte della finestra. Ad esempio, è possibile visualizzare una bitmap anziché testo o disegnare testo usando un tipo di carattere diverso.

Per definire una parte della finestra come creata dal proprietario, inviare il messaggio SB_edizione Standard TTEXT alla barra di stato, specificando la parte e la tecnica di disegno SBT_OWNERDRAW. Quando si specifica SBT_OWNERDRAW, il parametro lParam è un valore definito dall'applicazione a 32 bit che l'applicazione può usare durante il disegno della parte. Ad esempio, è possibile specificare un handle del tipo di carattere, un handle bitmap, un indirizzo di una stringa e così via.

Quando una barra di stato deve disegnare una parte disegnata dal proprietario, invia il messaggio di WM_DRAWITEM alla finestra padre. Il parametro wParam del messaggio è l'identificatore della finestra figlio della barra di stato e il parametro lParam è l'indirizzo di una struttura DRAWITEMSTRUCT . La finestra padre utilizza le informazioni nella struttura per disegnare la parte. Per una parte disegnata dal proprietario di una barra di stato, DRAWITEMSTRUCT contiene le informazioni seguenti.

Membro Descrizione
CtlType Indefinito; non usare.
CtlID Identificatore della finestra figlio della barra di stato.
Itemid Indice in base zero della parte da disegnare.
itemAction Indefinito; non usare.
itemState Indefinito; non usare.
hwndItem Handle sulla barra di stato.
Hdc Handle nel contesto del dispositivo della barra di stato.
rcItem Coordinate della parte della finestra da disegnare. Le coordinate sono relative all'angolo superiore sinistro della barra di stato.
Itemdata Valore a 32 bit definito dall'applicazione specificato nel parametro lParam del messaggio SB_edizione Standard TTEXT.

 

Barre di stato modalità semplice

Si inserisce una barra di stato in modalità "semplice" inviando un messaggio di SB_SIMPLE. Una barra di stato in modalità semplice visualizza una sola parte. Quando il testo della finestra è impostato, la finestra viene invalidata, ma non viene ridisegnata fino al successivo WM_PAINT. L'attesa del messaggio riduce lo sfarfallio dello schermo riducendo al minimo il numero di volte in cui la finestra viene ridisegnata. Una barra di stato in modalità semplice è utile per visualizzare il testo della Guida per le voci di menu mentre l'utente scorre il menu.

La stringa visualizzata da una barra di stato in modalità semplice viene mantenuta separatamente dalle stringhe visualizzate in modalità non semplice. Ciò significa che è possibile inserire la finestra in modalità semplice, impostarne il testo e tornare alla modalità nonsimple senza modificare il testo in modalità non semplice.

Quando si imposta il testo di una barra di stato in modalità semplice, è possibile specificare qualsiasi tecnica di disegno ad eccezione di SBT_OWNERDRAW. Una barra di stato in modalità semplice non supporta il disegno del proprietario.

Elaborazione dei messaggi della barra di stato predefinita

In questa sezione vengono descritti i messaggi gestiti dalla routine della finestra per la classe STATUSCLASSNAME predefinita.

Message Elaborazione predefinita
WM_CREATE Inizializza la barra di stato.
WM_DESTROY Libera le risorse allocate per la barra di stato.
WM_GETFONT Restituisce l'handle al tipo di carattere corrente con cui la barra di stato disegna il testo.
WM_GETTEXT Copia il testo dalla prima parte di una barra di stato in un buffer. Restituisce un valore a 32 bit che specifica la lunghezza, in caratteri, del testo e la tecnica utilizzata per disegnare il testo.
WM_GETTEXTLENGTH Restituisce un valore a 32 bit che specifica la lunghezza, in caratteri, del testo nella prima parte di una barra di stato e la tecnica utilizzata per disegnare il testo.
WM_NCHITTEST Restituisce il valore HTBOTTOMRIGHT se il cursore del mouse si trova nel riquadro di ridimensionamento, causando la visualizzazione del cursore di ridimensionamento da parte del sistema. Se il cursore del mouse non è nel riquadro di ridimensionamento, la barra di stato passa questo messaggio alla funzione DefWindowProc.
WM_PAINT Disegna l'area non valida della barra di stato. Se il parametro wParam è diverso da NULL, il controllo presuppone che il valore sia un HDC e disegna utilizzando tale contesto di dispositivo.
WM_edizione Standard TFONT Seleziona l'handle del tipo di carattere nel contesto del dispositivo per la barra di stato.
WM_edizione Standard TTEXT Copia il testo specificato nella prima parte di una barra di stato, utilizzando l'operazione di disegno predefinita (specificata come zero). Restituisce TRUE se ha esito positivo o FAL edizione Standard in caso contrario.
WM_SIZE Ridimensiona la barra di stato in base alla larghezza corrente dell'area client della finestra padre e all'altezza del tipo di carattere corrente della barra di stato.