Informazioni sui controlli della barra di rilevamento

Una barra di avanzamento è una finestra che contiene un dispositivo di scorrimento (talvolta chiamato pollice) in un canale e segni di graduazione facoltativi. Quando l'utente sposta il dispositivo di scorrimento, usando il mouse o i tasti di direzione, la barra di avanzamento invia messaggi di notifica per indicare la modifica.

Le barre di avanzamento sono utili quando si desidera che l'utente selezioni un valore intero senza segno discreto o un set di valori interi senza segno consecutivi in un intervallo. Ad esempio, è possibile usare una barra di avanzamento per consentire all'utente di impostare la frequenza di ripetizione della tastiera spostando il dispositivo di scorrimento su un determinato segno di graduazione. La figura seguente mostra una barra di avanzamento tipica.

screen shot of a trackbar with labels at the ends for slow and fast

Il dispositivo di scorrimento in una barra di avanzamento si sposta in incrementi specificati durante la creazione. I valori in questo intervallo sono definiti unità logiche. Ad esempio, se si specifica che la barra di avanzamento deve avere unità logiche che vanno da 0 a 5, il dispositivo di scorrimento può occupare solo sei posizioni: una posizione a sinistra della barra di avanzamento e una posizione per ogni incremento nell'intervallo. In genere, ognuna di queste posizioni è identificata da un segno di graduazione; Tuttavia, il numero di segni di graduazione è arbitrario e può essere minore del numero di posizioni logiche.

È possibile creare una barra di avanzamento usando la funzione CreateWindowEx, specificando la classe della finestra TRACKBAR_CLASS. Dopo aver creato una barra di rilevamento, è possibile usare i messaggi della barra di rilevamento per impostare e recuperare molte delle relative proprietà. Le modifiche effettuabili includono l'impostazione delle posizioni minima e massima per il dispositivo di scorrimento, il disegno di segni di graduazione, l'impostazione di un intervallo di selezione e il riposizionamento del dispositivo di scorrimento.

Intervallo di selezione

Se si crea una barra di avanzamento con lo stile TBS_ENABLEedizione Standard LRANGE, è possibile specificare un intervallo di selezione. La barra di avanzamento evidenzia l'intervallo di selezione e visualizza segni di graduazione triangolari all'inizio e alla fine, come illustrato nella figura seguente.

screen shot of a trackbar with a range highlighted

L'intervallo di selezione della barra di avanzamento non influisce in alcun modo sulla relativa funzionalità. Spetta all'applicazione implementare l'intervallo. Questa operazione può essere eseguita in uno dei modi seguenti:

  • Usare un intervallo di selezione per consentire all'utente di impostare valori massimi e minimi per alcuni parametri. Ad esempio, l'utente potrebbe spostare il dispositivo di scorrimento in una posizione e quindi fare clic su un pulsante con l'etichetta "Max". L'applicazione imposta quindi l'intervallo di selezione per visualizzare i valori scelti dall'utente.
  • Limitare lo spostamento del dispositivo di scorrimento a un intervallo secondario predeterminato all'interno del controllo, gestendo la notifica WM_HSCROLL o WM_VSCROLL e non consentendo alcun movimento all'esterno dell'intervallo di selezione. È possibile eseguire questa operazione, ad esempio, se l'intervallo di valori disponibili per l'utente può cambiare a causa di altre scelte effettuate dall'utente o in base alle risorse disponibili.

Messaggi della barra di rilevamento

Le unità logiche di una barra di avanzamento sono il set di valori contigui che la barra di avanzamento può rappresentare. In genere vengono definiti specificando l'intervallo di valori possibili con un messaggio TBM_edizione Standard TRANGE non appena è stata creata la barra di avanzamento. Le applicazioni possono modificare dinamicamente l'intervallo usando TBM_edizione Standard TRANGE, TBM_edizione Standard TRANGEMAX o TBM_edizione Standard TRANGEMIN.

Per recuperare la posizione del dispositivo di scorrimento( ovvero il valore scelto dall'utente), usare il messaggio TBM_GETPOS. Per impostare la posizione del dispositivo di scorrimento, usare il messaggio TBM_edizione Standard TPOS.

Una barra di avanzamento visualizza automaticamente i segni di graduazione all'inizio e alla fine, a meno che non si specifichi lo stile TBS_NOTICKS. Nell'editor di risorse di Microsoft Visual Studio questo significa impostare la proprietà Tick Marks su False. È possibile utilizzare lo stile TBS_AUTOTICKS per visualizzare automaticamente segni di graduazione aggiuntivi a intervalli regolari lungo la barra di avanzamento. Per impostazione predefinita, una barra di avanzamento TBS_AUTOTICKS visualizza un segno di graduazione a ogni incremento dell'intervallo della barra di avanzamento. Per specificare un intervallo diverso per i segni di graduazione automatici, inviare il messaggio TBM_edizione Standard TTICFREQ alla barra di avanzamento. Ad esempio, è possibile usare questo messaggio per visualizzare solo 10 segni di graduazione in un intervallo compreso tra 1 e 100.

Per impostare la posizione di un singolo segno di graduazione, inviare il messaggio TBM_edizione Standard TTIC. Una barra di avanzamento mantiene una matrice di valori DWORD che archivia la posizione di ogni segno di graduazione. La matrice non include il primo e l'ultimo segno di graduazione, che la barra di avanzamento crea automaticamente. È possibile specificare un indice in questa matrice quando si invia il messaggio di TBM_GETTIC per recuperare la posizione del segno di graduazione corrispondente. In alternativa, è possibile inviare il messaggio di TBM_GETPTICS per recuperare un puntatore alla matrice. Il numero di elementi nella matrice è uguale a due meno del conteggio dei tick restituito dal messaggio TBM_GETNUMTICS. Questo perché il conteggio restituito da TBM_GETNUMTICS include il primo e l'ultimo segno di graduazione, che non sono inclusi nella matrice. Per recuperare la posizione fisica di un segno di graduazione, nelle coordinate client della finestra della barra di avanzamento inviare il messaggio TBM_GETTICPOS. Il messaggio TBM_CLEARTICS rimuove tutti i segni di graduazione della barra di avanzamento, ma il primo e l'ultimo.

Le dimensioni della linea di una barra di avanzamento determinano la distanza del dispositivo di scorrimento in risposta all'input da tastiera dai tasti di direzione, ad esempio freccia DESTRA o FRECCIA GIÙ. Per recuperare o impostare le dimensioni della riga, inviare i messaggi TBM_GETLINESIZE e TBM_edizione Standard TLINESIZE. La barra di avanzamento invia anche i codici di notifica TB_LINEUP e TB_LINEDOWN alla finestra padre quando l'utente preme i tasti di direzione.

Le dimensioni della pagina di una barra di avanzamento determinano la distanza del dispositivo di scorrimento in risposta all'input da tastiera, ad esempio il tasto PAGE UP o PAGE DOWN o l'input del mouse, ad esempio i clic nel canale della barra di avanzamento. Per recuperare o impostare le dimensioni della pagina, inviare i messaggi TBM_GETPAGESIZE e TBM_edizione Standard TPAGESIZE. La barra di avanzamento invia anche il TB_PAGEUP e TB_PAGEDOWN i codici di notifica alla finestra padre quando riceve l'input della tastiera o del mouse che scorre la pagina. Per altre informazioni, vedere Messaggi di notifica della barra di rilevamento.

Un'applicazione può inviare messaggi per recuperare le dimensioni di una barra di avanzamento. Il messaggio TBM_GETTHUMBRECT recupera il rettangolo di delimitazione per il dispositivo di scorrimento. Il messaggio TBM_GETTHUMBLENGTH recupera la lunghezza del dispositivo di scorrimento. Il messaggio TBM_GETCHANNELRECT recupera il rettangolo di delimitazione per il canale della barra di avanzamento, ovvero l'area su cui si sposta il dispositivo di scorrimento. Contiene l'evidenziazione quando viene selezionato un intervallo. Se un trackbar ha lo stile TBS_FIXEDLENGTH, è possibile inviare il messaggio TBM_edizione Standard TTHUMBLENGTH per modificare la lunghezza del dispositivo di scorrimento.

È possibile recuperare o impostare l'intervallo di selezione inviando messaggi alla barra di rilevamento. Usare il messaggio TBM_edizione Standard T edizione Standard L per impostare le posizioni iniziali e finali di una selezione. Per impostare solo la posizione iniziale o solo la posizione finale di una selezione, inviare un messaggio TBM_edizione Standard T edizione Standard LSTART o TBM_edizione Standard T edizione Standard LEND. Per recuperare le posizioni iniziali o finali di un intervallo di selezione, inviare un messaggio TBM_GETedizione Standard LSTART o TBM_GETedizione Standard LEND. Per cancellare un intervallo di selezione e ripristinare la barra di avanzamento nell'intervallo originale, inviare il messaggio TBM_CLEARedizione Standard L.

Nota

È responsabilità dell'applicazione assicurarsi che l'utente non possa selezionare valori esterni all'intervallo di selezione. Il controllo stesso non impedisce all'utente di spostare il dispositivo di scorrimento all'esterno dell'intervallo.

 

Messaggi di notifica della barra di rilevamento

Una barra di avanzamento notifica alla finestra padre delle azioni utente inviando all'elemento padre un WM_HSCROLL o WM_VSCROLL messaggio. Una barra di avanzamento con lo stile TBS_HORZ invia messaggi WM_HSCROLL. Una barra di avanzamento con lo stile TBS_VERT invia messaggi WM_VSCROLL . La parola in ordine basso del parametro wParam di WM_HSCROLL o WM_VSCROLL contiene il codice di notifica. Per i codici di notifica TB_THUMBPOSITION e TB_THUMBTRACK, la parola di ordine elevato del parametro wParam specifica la posizione del dispositivo di scorrimento. Per tutti gli altri codici di notifica, la parola di ordine elevato è zero; inviare il messaggio di TBM_GETPOS per determinare la posizione del dispositivo di scorrimento. Il parametro lParam è l'handle della barra di avanzamento.

Il sistema invia i codici di notifica TB_BOTTOM, TB_LINEDOWN, TB_LINEUP e TB_TOP solo quando l'utente interagisce con una barra di avanzamento usando la tastiera. I codici di notifica TB_THUMBPOSITION e TB_THUMBTRACK vengono inviati solo quando l'utente usa il mouse. I codici di notifica TB_ENDTRACK, TB_PAGEDOWN e TB_PAGEUP vengono inviati in entrambi i casi. Nella tabella seguente sono elencati i codici di notifica della barra di avanzamento e gli eventi (codici chiave virtuale o eventi del mouse) che causano l'invio delle notifiche dei codicidi chiave virtuale.

Codice di notifica Motivo inviato
TB_BOTTOM VK_END
TB_ENDTRACK WM_KEYUP (l'utente ha rilasciato una chiave che ha inviato un codice di chiave virtuale pertinente)
TB_LINEDOWN VK_RIGHT o VK_DOWN
TB_LINEUP VK_LEFT o VK_UP
TB_PAGEDOWN VK_NEXT (l'utente ha fatto clic sul canale sottostante o a destra del dispositivo di scorrimento)
TB_PAGEUP VK_PRIOR (l'utente ha fatto clic sul canale sopra o a sinistra del dispositivo di scorrimento)
TB_THUMBPOSITION WM_LBUTTONUP dopo un codice di notifica TB_THUMBTRACK
TB_THUMBTRACK Movimento del dispositivo di scorrimento (l'utente ha trascinato il dispositivo di scorrimento)
TB_TOP VK_HOME

 

Elaborazione dei messaggi della barra di avanzamento predefinita

Questa sezione descrive l'elaborazione dei messaggi della finestra eseguita da una barra di rilevamento.

Message Elaborazione eseguita
WM_CAPTURECHANGED Termina il timer se è stato impostato durante l'elaborazione WM_LBUTTONDOWN e invia il codice di notifica TB_THUMBPOSITION, se necessario. Invia sempre il codice di notifica TB_ENDTRACK.
WM_CREATE Esegue un'inizializzazione aggiuntiva, ad esempio impostando le dimensioni della riga, le dimensioni della pagina e la frequenza dei segni di graduazione sui valori predefiniti.
WM_DESTROY Libera le risorse.
WM_ENABLE Aggiorna la finestra della barra di avanzamento.
WM_ERAedizione Standard BKGND Cancella lo sfondo della finestra utilizzando il colore di sfondo corrente per la barra di avanzamento.
WM_GETDLGCODE Restituisce il valore DLGC_WANTARROWS.
WM_KEYDOWN Elabora i tasti di direzione e invia i codici di notifica TB_TOP, TB_BOTTOM, TB_PAGEUP, TB_PAGEDOWN, TB_LINEUP e TB_LINEDOWN.
WM_KEYUP Invia il codice di notifica TB_ENDTRACK se la chiave era uno dei tasti di direzione.
WM_KILLFOCUS Aggiorna la finestra della barra di avanzamento.
WM_LBUTTONDOWN Imposta lo stato attivo e l'acquisizione del mouse sulla barra di avanzamento. Quando necessario, imposta un timer che determina la velocità con cui il dispositivo di scorrimento si sposta verso il cursore del mouse quando l'utente tiene premuto il pulsante del mouse nella finestra.
WM_LBUTTONUP Rilascia l'acquisizione del mouse e termina il timer se ne è stato impostato uno durante l'elaborazione WM_LBUTTONDOWN. Invia il codice di notifica TB_THUMBPOSITION, se necessario. Invia sempre il codice di notifica TB_ENDTRACK.
WM_MOUedizione Standard MOVE Sposta il dispositivo di scorrimento e invia il codice di notifica TB_THUMBTRACK durante il rilevamento del mouse (vedere WM_TIMER).
WM_PAINT Disegna la barra di avanzamento. 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 TFOCUS Aggiorna la finestra della barra di avanzamento.
WM_SIZE Imposta le dimensioni della barra di avanzamento, rimuovendo il dispositivo di scorrimento se non c'è spazio sufficiente per visualizzarlo.
WM_TIMER Recupera la posizione del mouse e aggiorna la posizione del dispositivo di scorrimento. Viene ricevuto solo quando l'utente trascina il dispositivo di scorrimento.
WM_WININICHANGE Inizializza le dimensioni del dispositivo di scorrimento.

 

Descrizioni comando della barra di avanzamento

Una barra di avanzamento creata con lo stile TBS_TOOLTIPS dispone di un controllo descrizione comando predefinito. La descrizione comando rimane visibile e visualizza il valore corrente mentre l'utente trascina il dispositivo di scorrimento usando il mouse.

È possibile assegnare un nuovo controllo descrizione comando a una barra di avanzamento inviando il messaggio TBM_edizione Standard TTOOLTIPS. Per recuperare l'handle in un controllo descrizione comando assegnato, usare il messaggio TBM_GETTOOLTIPS.