Condividi tramite


Informazioni sulle barre di scorrimento

Una finestra può visualizzare un oggetto dati, ad esempio un documento o una bitmap, più grande dell'area client della finestra. Se fornito con una barra di scorrimento, l'utente può scorrere un oggetto dati nell'area client per visualizzare le parti dell'oggetto che si estendono oltre i bordi della finestra.

Le barre di scorrimento devono essere incluse in qualsiasi finestra per cui il contenuto dell'area client si estende oltre i bordi della finestra. L'orientamento di una barra di scorrimento determina la direzione in cui si verifica lo scorrimento quando l'utente opera la barra di scorrimento. Una barra di scorrimento orizzontale consente all'utente di scorrere il contenuto di una finestra verso sinistra o destra. Una barra di scorrimento verticale consente all'utente di scorrere il contenuto verso l'alto o verso il basso.

In questa sezione vengono illustrati gli argomenti seguenti.

Parti di una barra di scorrimento

Una barra di scorrimento è costituita da un albero ombreggiato con un pulsante freccia a ogni estremità e una casella di scorrimento (talvolta detta pollice) tra i pulsanti freccia. Una barra di scorrimento rappresenta la lunghezza o la larghezza complessiva di un oggetto dati nell'area client di una finestra; la casella di scorrimento rappresenta la parte dell'oggetto visibile nell'area client. La posizione della casella di scorrimento cambia ogni volta che l'utente scorre un oggetto dati per visualizzarne una parte diversa. Il sistema regola anche le dimensioni della casella di scorrimento di una barra di scorrimento in modo che indichi quale parte dell'intero oggetto dati è attualmente visibile nella finestra. Se la maggior parte dell'oggetto è visibile, la casella di scorrimento occupa la maggior parte dell'albero della barra di scorrimento. Analogamente, se solo una piccola parte dell'oggetto è visibile, la casella di scorrimento occupa una piccola parte dell'albero della barra di scorrimento.

L'utente scorre il contenuto di una finestra facendo clic su uno dei pulsanti freccia, facendo clic sull'area nell'albero della barra di scorrimento ombreggiata o trascinando la casella di scorrimento. Quando l'utente fa clic su un pulsante freccia, l'applicazione scorre il contenuto di un'unità (in genere una singola riga o colonna). Quando l'utente fa clic sulle aree ombreggiate, l'applicazione scorre il contenuto di una finestra. La quantità di scorrimento che si verifica quando l'utente trascina la casella di scorrimento dipende dalla distanza in cui l'utente trascina la casella di scorrimento e dall'intervallo di scorrimento della barra di scorrimento. Per altre informazioni sull'intervallo di scorrimento, vedere Posizione casella di scorrimento e Intervallo di scorrimento.

La schermata seguente mostra un controllo di modifica avanzato con barre di scorrimento verticali e orizzontali, come potrebbero essere visualizzate in Windows Vista. La barra di scorrimento verticale è attualmente "attiva" perché il puntatore del mouse è stato posizionato sopra di esso quando è stata scattata la schermata.

screen shot of a rich edit control with scroll bars

Barre di scorrimento standard e controlli barra di scorrimento

Una barra di scorrimento è inclusa in una finestra come barra di scorrimento standard o come controllo barra di scorrimento. Una barra di scorrimento standard si trova nell'area non client di una finestra. Viene creato con la finestra e visualizzato quando viene visualizzata la finestra. L'unico scopo di una barra di scorrimento standard è consentire all'utente di generare richieste di scorrimento per visualizzare l'intero contenuto dell'area client. È possibile includere una barra di scorrimento standard in una finestra specificando WS_HSCROLL, WS_VSCROLL o entrambi gli stili quando si crea la finestra. Lo stile WS_HSCROLL crea una barra di scorrimento orizzontale posizionata nella parte inferiore dell'area client. Lo stile WS_VSCROLL crea una barra di scorrimento verticale posizionata a destra dell'area client. I valori delle metriche di sistema SM_CXHSCROLL e SM_CYHSCROLL definiscono la larghezza e l'altezza di una barra di scorrimento orizzontale standard. I valori SM_CXVSCROLL e SM_CYVSCROLL definiscono la larghezza e l'altezza di una barra di scorrimento verticale standard. Una barra di scorrimento standard fa parte della finestra associata e pertanto non dispone di un handle di finestra autonomo.

Un controllo barra di scorrimento è una finestra di controllo che appartiene alla classe della finestra SCROLLBAR. Viene visualizzato un controllo barra di scorrimento e funziona come una barra di scorrimento standard, ma si tratta di una finestra separata. Come finestra separata, un controllo barra di scorrimento assume lo stato attivo diretto per l'input. A differenza di una barra di scorrimento standard, un controllo barra di scorrimento dispone anche di un'interfaccia di tastiera predefinita.

È possibile usare tutti i controlli barra di scorrimento necessari in una singola finestra. Quando si crea un controllo barra di scorrimento, è necessario specificare le dimensioni e la posizione della barra di scorrimento. Tuttavia, se è possibile ridimensionare la finestra di un controllo barra di scorrimento, è necessario apportare modifiche alle dimensioni della barra di scorrimento ogni volta che cambiano le dimensioni della finestra.

Il vantaggio dell'uso di una barra di scorrimento standard è che il sistema crea la barra di scorrimento e ne imposta automaticamente le dimensioni e la posizione. Tuttavia, le barre di scorrimento standard sono talvolta troppo restrittive. Si supponga, ad esempio, di voler dividere un'area client in quadranti e di usare un set separato di barre di scorrimento per controllare il contenuto di ogni quadrante. Non è possibile utilizzare barre di scorrimento standard perché è possibile creare un solo set di barre di scorrimento per una determinata finestra. Usare invece i controlli barra di scorrimento, perché è possibile aggiungerli a una finestra desiderata.

Le applicazioni possono fornire controlli barra di scorrimento per scopi diversi dallo scorrimento del contenuto di una finestra. Ad esempio, un'applicazione screen saver potrebbe fornire una barra di scorrimento per impostare la velocità con cui gli elementi grafici vengono spostati sullo schermo.

Un controllo barra di scorrimento può avere diversi stili che consentono di controllare l'orientamento e la posizione della barra di scorrimento. Specificare gli stili desiderati quando si chiama la funzione CreateWindowEx per creare un controllo barra di scorrimento. Alcuni stili creano un controllo barra di scorrimento che usa una larghezza o un'altezza predefinita. È tuttavia necessario specificare sempre le coordinate x e y e le altre dimensioni della barra di scorrimento.

Per una tabella di stili di controllo barra di scorrimento, vedere Stili di controllo barra di scorrimento.

Nota

Per usare gli stili di visualizzazione con barre di scorrimento, un'applicazione deve includere un manifesto e deve chiamare InitCommonControls all'inizio del programma. Per informazioni sugli stili di visualizzazione, vedere Stili di visualizzazione. Per informazioni sui manifesti, vedere Abilitazione degli stili di visualizzazione.

 

Posizione casella di scorrimento e intervallo di scorrimento

La posizione della casella di scorrimento è rappresentata come un numero intero; è relativo alla parte sinistra o superiore della barra di scorrimento, a seconda che la barra di scorrimento sia orizzontale o verticale. La posizione deve essere compresa tra i valori minimo e massimo dell'intervallo di scorrimento. Ad esempio, in una barra di scorrimento con un intervallo compreso tra 0 e 100, la posizione 50 si trova al centro, con le posizioni rimanenti distribuite equamente lungo la barra di scorrimento. L'intervallo iniziale dipende dalla barra di scorrimento. Le barre di scorrimento standard hanno un intervallo iniziale compreso tra 0 e 100; I controlli barra di scorrimento hanno un intervallo vuoto (i valori minimo e massimo sono zero), a meno che non si fornisca un intervallo esplicito quando viene creato il controllo. È possibile modificare l'intervallo in qualsiasi momento. È possibile utilizzare la funzione SetScrollInfo per impostare i valori dell'intervallo e la funzione GetScrollInfo per recuperare i valori dell'intervallo corrente.

Un'applicazione regola in genere l'intervallo di scorrimento in valori interi pratici, semplificando la conversione della posizione della casella di scorrimento in un valore corrispondente all'oggetto dati da scorrere. Ad esempio, se un'applicazione deve visualizzare 260 righe di un file di testo in una finestra che può visualizzare solo 16 righe alla volta, l'intervallo di barre di scorrimento verticale può essere impostato su 1 a 244. Se la casella di scorrimento si trova nella posizione 1, la prima riga si troverà nella parte superiore della finestra. Se la casella di scorrimento si trova nella posizione 244, l'ultima riga (riga 260) si troverà nella parte inferiore della finestra. Se un'applicazione tenta di specificare un valore di posizione minore o superiore al valore massimo, viene invece utilizzato il valore dell'intervallo di scorrimento minimo o massimo.

È possibile impostare una dimensione di pagina per una barra di scorrimento. Le dimensioni della pagina rappresentano il numero di unità dati che possono rientrare nell'area client della finestra proprietario in base alle dimensioni correnti. Ad esempio, se l'area client può contenere 16 righe di testo, un'applicazione imposta le dimensioni della pagina su 16. Il sistema utilizza le dimensioni della pagina, insieme all'intervallo di scorrimento e alla lunghezza dell'albero della barra di scorrimento, per impostare le dimensioni della casella di scorrimento. Ogni volta che viene ridimensionata una finestra contenente una barra di scorrimento, un'applicazione deve chiamare la funzione SetScrollInfo per impostare le dimensioni della pagina. Un'applicazione può recuperare le dimensioni correnti della pagina chiamando la funzione GetScrollInfo di invio.

Per stabilire una relazione utile tra l'intervallo di barre di scorrimento e l'oggetto dati, un'applicazione deve regolare l'intervallo ogni volta che cambiano le dimensioni dell'oggetto dati.

Quando l'utente sposta la casella di scorrimento in una barra di scorrimento, la barra di scorrimento segnala la posizione della casella di scorrimento come intero nell'intervallo di scorrimento. Se la posizione è il valore minimo, la casella di scorrimento si trova nella parte superiore di una barra di scorrimento verticale o all'estremità sinistra di una barra di scorrimento orizzontale. Se la posizione è il valore massimo, la casella di scorrimento si trova nella parte inferiore di una barra di scorrimento verticale o alla fine destra di una barra di scorrimento orizzontale.

Il valore massimo che una barra di scorrimento può segnalare ,ovvero la posizione di scorrimento massima, dipende dalle dimensioni della pagina. Se la barra di scorrimento ha una dimensione di pagina maggiore di una, la posizione di scorrimento massima è inferiore al valore di intervallo massimo. È possibile utilizzare la formula seguente per calcolare la posizione di scorrimento massima:

MaxScrollPos = MaxRangeValue - (PageSize - 1) 

Un'applicazione deve spostare la casella di scorrimento in una barra di scorrimento. Anche se l'utente effettua una richiesta di scorrimento in una barra di scorrimento, la barra di scorrimento non aggiorna automaticamente la posizione della casella di scorrimento. Passa invece la richiesta alla finestra padre, che deve scorrere i dati e aggiornare la posizione della casella di scorrimento. Un'applicazione usa la funzione SetScrollInfo per aggiornare la posizione della casella di scorrimento. In caso contrario, usa la funzione SetScrollPos. Poiché controlla lo spostamento della casella di scorrimento, l'applicazione può spostare la casella di scorrimento in incrementi ottimali per lo scorrimento dei dati.

Visibilità barra di scorrimento

Il sistema nasconde e disabilita una barra di scorrimento standard quando vengono specificati valori minimi e massimi uguali. Il sistema nasconde e disabilita anche una barra di scorrimento standard se si specifica una dimensione di pagina che include l'intero intervallo di scorrimento della barra di scorrimento. Questo è il modo per nascondere temporaneamente una barra di scorrimento quando non è necessaria per il contenuto dell'area client. Non è necessario effettuare richieste di scorrimento attraverso la barra di scorrimento quando è nascosto. Il sistema abilita la barra di scorrimento e lo mostra di nuovo quando si impostano i valori minimo e massimo su valori diversi e quando le dimensioni della pagina non includono l'intero intervallo di scorrimento. La funzione ShowScrollBar può essere usata anche per nascondere o visualizzare una barra di scorrimento. Non influisce sull'intervallo della barra di scorrimento, sulle dimensioni della pagina o sulla posizione della casella di scorrimento.

La funzione EnableScrollBar può essere usata per disabilitare una o entrambe le frecce di una barra di scorrimento. Un'applicazione visualizza frecce disabilitate in grigio e non risponde all'input dell'utente.

Richieste barra di scorrimento

L'utente effettua richieste di scorrimento facendo clic su varie parti di una barra di scorrimento. Il sistema invia la richiesta alla finestra specificata sotto forma di WM_HSCROLL o WM_VSCROLL messaggio. Una barra di scorrimento orizzontale invia il messaggio di WM_HSCROLL ; una barra di scorrimento verticale invia il messaggio WM_VSCROLL . Ogni messaggio include un codice di richiesta che corrisponde all'azione dell'utente, all'handle alla barra di scorrimento (solo controlli barra di scorrimento) e, in alcuni casi, alla posizione della casella di scorrimento.

Il diagramma seguente mostra il codice di richiesta generato dall'utente quando si fa clic su varie parti di una barra di scorrimento.

diagram showing the request codes associated with each region on two scroll bars

I valori SB_ specificano l'azione eseguita dall'utente. Un'applicazione esamina i codici che accompagnano i messaggi WM_HSCROLL e WM_VSCROLL e quindi esegue l'operazione di scorrimento appropriata. Nella tabella seguente viene specificata l'azione dell'utente per ogni valore, seguita dalla risposta dell'applicazione. In ogni caso, un'unità viene definita dall'applicazione in base alle esigenze dei dati. Ad esempio, l'unità tipica per lo scorrimento verticale del testo è una riga di testo.

Richiedi Azione Response
SB_LINEUP L'utente fa clic sulla freccia di scorrimento superiore. Decrementa la posizione della casella di scorrimento; scorre verso la parte superiore dei dati di un'unità.
SB_LINEDOWN L'utente fa clic sulla freccia di scorrimento inferiore. Incrementa la posizione della casella di scorrimento; scorre verso la fine dei dati di un'unità.
SB_LINELEFT L'utente fa clic sulla freccia di scorrimento a sinistra. Decrementa la posizione della casella di scorrimento; scorre verso l'estremità sinistra dei dati di un'unità.
SB_LINERIGHT L'utente fa clic sulla freccia di scorrimento a destra. Incrementa la posizione della casella di scorrimento; scorre verso l'estremità destra dei dati di un'unità.
SB_PAGEUP L'utente fa clic sull'albero della barra di scorrimento sopra la casella di scorrimento. Decrementa la posizione della casella di scorrimento in base al numero di unità dati nella finestra; scorre verso la parte superiore dei dati in base allo stesso numero di unità.
SB_PAGEDOWN L'utente fa clic sull'albero della barra di scorrimento sotto la casella di scorrimento. Incrementa la posizione della casella di scorrimento in base al numero di unità dati nella finestra; scorre verso la fine dei dati in base allo stesso numero di unità.
SB_PAGELEFT L'utente fa clic sull'albero della barra di scorrimento a sinistra della casella di scorrimento. Decrementa la posizione della casella di scorrimento in base al numero di unità dati nella finestra; scorre verso l'estremità sinistra dei dati in base allo stesso numero di unità.
SB_PAGERIGHT L'utente fa clic sull'albero della barra di scorrimento a destra della casella di scorrimento. Incrementa la posizione della casella di scorrimento in base al numero di unità dati nella finestra; scorre verso l'estremità destra dei dati in base allo stesso numero di unità.
SB_THUMBPOSITION L'utente rilascia la casella di scorrimento dopo averlo trascinato. Imposta la casella di scorrimento sulla posizione specificata nel messaggio; scorre i dati in base allo stesso numero di unità di spostamento della casella di scorrimento.
SB_THUMBTRACK L'utente trascina la casella di scorrimento. Imposta la casella di scorrimento sulla posizione specificata nel messaggio e scorre i dati in base allo stesso numero di unità spostate dalla casella di scorrimento per le applicazioni che disegnano rapidamente i dati. Le applicazioni che non possono disegnare rapidamente i dati devono attendere il codice della richiesta SB_THUMBPOSITION prima di spostare la casella di scorrimento e scorrere i dati.
SB_ENDSCROLL L'utente rilascia il mouse dopo averlo premuto su una freccia o nell'albero della barra di scorrimento. Non è necessaria alcuna risposta.

 

Una barra di scorrimento genera SB_THUMBPOSITION e SB_THUMBTRACK codice di richiesta quando l'utente fa clic e trascina la casella di scorrimento. Un'applicazione deve essere programmata per elaborare il codice di richiesta SB_THUMBTRACK o SB_THUMBPOSITION.

Il codice di richiesta SB_THUMBPOSITION si verifica quando l'utente rilascia il pulsante del mouse dopo aver fatto clic sulla casella di scorrimento. Un'applicazione che elabora questo messaggio esegue l'operazione di scorrimento dopo che l'utente ha trascinato la casella di scorrimento nella posizione desiderata e rilasciato il pulsante del mouse.

Il codice della richiesta di SB_THUMBTRACK si verifica quando l'utente trascina la casella di scorrimento. Se un'applicazione elabora SB_THUMBTRACK codici di richiesta, può scorrere il contenuto di una finestra mentre l'utente trascina la casella di scorrimento. Tuttavia, una barra di scorrimento può generare molti SB_THUMBTRACK codice della richiesta in un breve periodo di tempo, quindi un'applicazione deve elaborare questi codici di richiesta solo se può aggiornare rapidamente il contenuto della finestra.

Interfaccia della tastiera per una barra di scorrimento

Un controllo barra di scorrimento fornisce un'interfaccia della tastiera predefinita che consente all'utente di inviare richieste di scorrimento tramite la tastiera; una barra di scorrimento standard non lo è. Quando un controllo barra di scorrimento ha lo stato attivo della tastiera, invia WM_HSCROLL e WM_VSCROLL messaggi alla finestra padre quando l'utente preme i tasti di direzione. Il codice della richiesta viene inviato con ogni messaggio corrispondente al tasto freccia premuto dall'utente. Di seguito sono riportati i tasti di direzione e i codici di richiesta corrispondenti.

Tasto freccia Richiedi il codice
DOWN SB_LINEDOWN o SB_LINERIGHT
END SB_BOTTOM
HOME SB_TOP
LEFT SB_LINEUP o SB_LINELEFT
PGDN SB_PAGEDOWN o SB_PAGERIGHT
PGUP SB_PAGEUP o SB_PAGELEFT
RIGHT SB_LINEDOWN o SB_LINERIGHT
UP SB_LINEUP o SB_LINELEFT

 

 

Nota

L'interfaccia della tastiera di un controllo barra di scorrimento invia i codici di richiesta SB_TOP e SB_BOTTOM. Il codice di richiesta SB_TOP indica che l'utente ha raggiunto il valore superiore dell'intervallo di scorrimento. Un'applicazione scorre verso il basso il contenuto della finestra in modo che la parte superiore dell'oggetto dati sia visibile. Il codice di richiesta SB_BOTTOM indica che l'utente ha raggiunto il valore inferiore dell'intervallo di scorrimento. Se un'applicazione elabora il codice di richiesta SB_BOTTOM, scorre il contenuto della finestra verso l'alto in modo che la parte inferiore dell'oggetto dati sia visibile.

 

Se si desidera un'interfaccia della tastiera per una barra di scorrimento standard, è possibile crearne una manualmente elaborando il messaggio WM_KEYDOWN nella routine della finestra e quindi eseguendo l'azione di scorrimento appropriata in base al codice del tasto virtuale che accompagna il messaggio. Per informazioni su come creare un'interfaccia della tastiera per una barra di scorrimento, vedere Creazione di un'interfaccia della tastiera per una barra di scorrimento standard.

Scorrimento dell'area client

Il modo più semplice per scorrere il contenuto di un'area client consiste nel cancellare e quindi ridisegnarlo. Si tratta del metodo che è probabile che un'applicazione venga usata con SB_PAGEUP, SB_PAGEDOWN e SB_TOP codici di richiesta, che in genere richiedono contenuto completamente nuovo.

Per alcuni codici di richiesta, ad esempio SB_LINEUP e SB_LINEDOWN, non è necessario cancellare tutto il contenuto, perché alcuni rimangono visibili dopo lo scorrimento. La funzione ScrollWindowEx mantiene una parte del contenuto dell'area client, sposta la parte mantenuta di una quantità specificata e quindi prepara il resto dell'area client per disegnare nuove informazioni. ScrollWindowEx usa la funzione BitBlt per spostare una parte specifica dell'oggetto dati in una nuova posizione all'interno dell'area client. Qualsiasi parte scoperta dell'area client (qualsiasi elemento non conservato) viene invalidata, cancellata e dipinta quando si verifica il successivo WM_PAINT messaggio.

La funzione ScrollWindowEx può essere usata per escludere una parte dell'area client dall'operazione di scorrimento. In questo modo, gli elementi con posizioni fisse, ad esempio le finestre figlio, vengono spostati all'interno dell'area client. Invalida automaticamente la parte dell'area client che riceve le nuove informazioni, quindi l'applicazione non deve calcolare le proprie aree di ritaglio. Per altre informazioni sul ritaglio, vedere Ritaglio.

In genere un'applicazione scorre il contenuto di una finestra nella direzione opposta a quella indicata dalla barra di scorrimento. Ad esempio, quando l'utente fa clic sull'albero della barra di scorrimento nell'area sotto la casella di scorrimento, un'applicazione scorre l'oggetto nella finestra verso l'alto per visualizzare una parte dell'oggetto che si trova sotto la parte visibile.

È anche possibile scorrere un'area rettangolare usando la funzione ScrollDC .

Colori e metriche della barra di scorrimento

Il valore del colore definito dal sistema, COLOR_SCROLLBAR, controlla il colore all'interno di un albero della barra di scorrimento. Utilizzare la funzione GetSysColor per determinare il colore dell'albero della barra di scorrimento e la funzione SetSysColors per impostare il colore dell'albero della barra di scorrimento. Si noti, tuttavia, che questa modifica del colore influisce su tutte le barre di scorrimento nel sistema.

È possibile ottenere le dimensioni delle bitmap usate dal sistema nelle barre di scorrimento standard chiamando la funzione GetSystemMetrics. Di seguito sono riportati i valori delle metriche di sistema associati alle barre di scorrimento.

Metrica di sistema Descrizione
SM_CXHSCROLL Larghezza della bitmap freccia sulla barra di scorrimento orizzontale
SM_CXHTHUMB Larghezza della casella di scorrimento sulla barra di scorrimento orizzontale. Questo valore recupera la larghezza di una barra di scorrimento con dimensioni di pagina pari a zero.
SM_CXVSCROLL Larghezza della bitmap freccia sulla barra di scorrimento verticale
SM_CYHSCROLL Altezza della bitmap freccia sulla barra di scorrimento orizzontale
SM_CYVSCROLL Altezza della bitmap freccia sulla barra di scorrimento verticale
SM_CYVTHUMB Altezza della casella di scorrimento sulla barra di scorrimento verticale. Questo valore recupera l'altezza di una barra di scorrimento con dimensioni di pagina pari a zero.