Informazioni sui controlli struttura a schede

Un controllo Struttura a schede è simile ai separatori in un blocco per appunti o alle etichette in un archivio. L'uso del controllo Struttura a schede consente a un'applicazione di definire più pagine per la stessa area di una finestra o una finestra di dialogo. Ogni pagina è costituita da un determinato tipo di informazioni o da un gruppo di controlli visualizzati dall'applicazione quando l'utente seleziona la scheda corrispondente.

La schermata seguente mostra un controllo struttura a schede semplice che contiene schede per i giorni della settimana. La scheda Martedì è stata selezionata.

screen shot of a property sheet with five tabs, one for each day of the week

Questo argomento include le sezioni seguenti.

Creazione di controlli struttura a schede

È possibile creare un controllo struttura a schede chiamando la funzione CreateWindowEx, specificando la classe finestra WC_TABCONTROL. Questa classe finestra viene registrata quando viene caricata la DLL dei controlli comuni. Per assicurarsi che la DLL venga caricata, usare la funzione InitCommonControlsEx.

In Microsoft Visual Studio è possibile creare un controllo struttura a schede usando la casella degli strumenti.

Si inviano messaggi a un controllo struttura a schede per aggiungere schede e influire in caso contrario sull'aspetto e sul comportamento del controllo. Ogni messaggio ha una macro corrispondente che è possibile usare invece di inviare il messaggio in modo esplicito. Non è possibile disabilitare una singola scheda in un controllo struttura a schede. Tuttavia, è possibile disabilitare un controllo struttura a schede in una finestra delle proprietà disabilitando la pagina corrispondente.

Stili dei controlli Struttura a schede

È possibile applicare determinate caratteristiche ai controlli struttura a schede specificando gli stili di controllo struttura al momento della creazione del controllo. Ad esempio, è possibile specificare l'allineamento e l'aspetto generale delle schede in un controllo struttura a schede.

È possibile che le schede sembrino simili ai pulsanti specificando lo stile di TCS_BUTTONS. Le schede in questo tipo di controllo struttura a schede devono avere la stessa funzione dei controlli pulsante; ovvero, fare clic su una scheda deve eseguire un comando invece di visualizzare una pagina. Poiché l'area di visualizzazione in un controllo struttura a schede pulsante non viene in genere utilizzata, non viene disegnato alcun bordo.

È possibile fare in modo che una scheda riceva lo stato attivo di input quando si fa clic specificando lo stile di TCS_FOCUSONBUTTONDOWN . Questo stile viene in genere utilizzato solo con lo stile TCS_BUTTONS. È possibile specificare che una scheda non riceve lo stato attivo per l'input quando si fa clic usando lo stile TCS_FOCUSNEVER.

Per impostazione predefinita, un controllo struttura a schede visualizza una sola riga di schede. Se non tutte le schede possono essere visualizzate contemporaneamente, il controllo Struttura a schede visualizza un controllo di scorrimento verso il basso in modo che l'utente possa scorrere altre schede nella visualizzazione. È possibile che un controllo struttura a schede visualizzi più righe di schede, se necessario, specificando lo stile TCS_MULTILINE. Con questo stile, tutte le schede possono essere visualizzate contemporaneamente. Le schede sono allineate a sinistra all'interno di ogni riga, a meno che non si specifichi lo stile TCS_RIGHTJUSTIFY. In questo caso, la larghezza di ogni scheda viene aumentata in modo che ogni riga di tabulazioni riempia l'intera larghezza del controllo struttura a schede.

Un controllo struttura a schede ridimensiona automaticamente ogni scheda in modo da adattarne l'icona, se disponibile, e la relativa etichetta. Per assegnare a tutte le schede la stessa larghezza, è possibile specificare lo stile TCS_FIXEDWIDTH. Il controllo ridimensiona tutte le schede per adattarsi all'etichetta più ampia oppure è possibile assegnare una larghezza e un'altezza specifiche usando il messaggio TCM_edizione Standard TITEMSIZE. All'interno di ogni scheda, il controllo centra l'icona e l'etichetta, posizionando l'icona a sinistra dell'etichetta. È possibile forzare l'icona a sinistra, lasciando l'etichetta al centro, specificando lo stile TCS_FORCEICONLEFT. È possibile allineare a sinistra sia l'icona che l'etichetta usando lo stile TCS_FORCELABELLEFT. Non è possibile utilizzare lo stile TCS_FIXEDWIDTH con lo stile TCS_RIGHTJUSTIFY.

È possibile specificare che la finestra padre disegna le schede nel controllo utilizzando lo stile TCS_OWNERDRAWFIXED. Per altre informazioni, vedere Schede disegnate dal proprietario.

È possibile specificare che un controllo struttura a schede creerà un controllo descrizione comando usando lo stile TCS_TOOLTIPS. Per altre informazioni, vedere Descrizioni comando controllo tabulazioni.

Schede e attributi di tabulazioni

Ogni scheda di un controllo struttura a schede è costituita da un'icona, da un'etichetta e da dati definiti dall'applicazione. Queste informazioni vengono specificate da una struttura TCITEM. È possibile aggiungere schede a un controllo struttura a schede, recuperare il numero di schede, recuperare e impostare il contenuto di una scheda ed eliminare le schede. Le schede sono identificate dal relativo indice in base zero.

Per aggiungere schede a un controllo struttura a schede, utilizzare il messaggio TCM_INedizione Standard RTITEM, specificando la posizione dell'elemento e l'indirizzo di una struttura TCITEM. È possibile recuperare e impostare il contenuto di una scheda esistente usando i messaggi TCM_GETITEM e TCM_edizione Standard TITEM. Per ogni scheda, è possibile specificare un'icona, un'etichetta o entrambe. È anche possibile specificare i dati definiti dall'applicazione da associare alla scheda .

È possibile recuperare il numero corrente di schede utilizzando il messaggio di TCM_GETITEMCOUNT, eliminare una scheda usando il messaggio TCM_DELETEITEM ed eliminare tutte le schede in un controllo struttura a schede utilizzando il messaggio TCM_DELETEALLITEMS.

È possibile associare i dati definiti dall'applicazione a ogni scheda. Ad esempio, è possibile salvare informazioni su ogni pagina con la scheda corrispondente. Per impostazione predefinita, un controllo struttura a schede alloca quattro byte aggiuntivi per scheda per i dati definiti dall'applicazione. È possibile modificare il numero di byte aggiuntivi per scheda usando il messaggio TCM_edizione Standard TITEMEXTRA. È possibile usare questo messaggio solo quando il controllo struttura a schede è vuoto.

I dati definiti dall'applicazione sono specificati dal membro lParam della struttura TCITEM . Se si usano più di 4 byte di dati definiti dall'applicazione, è necessario definire la propria struttura e usarla invece di TCITEM. È possibile recuperare e impostare i dati definiti dall'applicazione nello stesso modo in cui si recuperano e impostano altre informazioni su una scheda, usando i messaggi TCM_GETITEM e TCM_edizione Standard TITEM.

Il primo membro della struttura deve essere una struttura TCITEMHEADER e i membri rimanenti devono specificare i dati definiti dall'applicazione. TCITEMHEADER è identico a TCITEM, ad eccezione del membro lParam . La differenza tra le dimensioni della struttura e le dimensioni di TCITEMHEADER deve essere uguale al numero di byte aggiuntivi per scheda.

Area di visualizzazione

L'area di visualizzazione di un controllo struttura a schede è l'area in cui un'applicazione visualizza la pagina corrente. In genere, un'applicazione crea una finestra o una finestra di dialogo figlio, impostando le dimensioni e la posizione della finestra per adattarsi all'area di visualizzazione. Dato il rettangolo della finestra per un controllo struttura a schede, è possibile calcolare il rettangolo di delimitazione dell'area di visualizzazione usando il messaggio TCM_ADJUSTRECT.

A volte l'area di visualizzazione deve essere una dimensione specifica, ad esempio la dimensione di una finestra di dialogo figlio senza modalità. Dato il rettangolo di delimitazione per l'area di visualizzazione, è possibile utilizzare TCM_ADJUSTRECT per calcolare il rettangolo di finestra corrispondente per il controllo struttura a schede.

Selezione tabulazione

Quando l'utente seleziona una scheda, un controllo struttura a schede invia i codici di notifica della finestra padre sotto forma di messaggi di WM_NOTIFY . Il codice di notifica TCN_edizione Standard LCHANGING viene inviato prima della modifica della selezione e il codice di notifica TCN_edizione Standard LCHANGE viene inviato dopo la modifica della selezione.

È possibile elaborare TCN_edizione Standard LCHANGING per salvare lo stato della pagina in uscita. È possibile restituire TRUE per impedire la modifica della selezione. Ad esempio, potrebbe non essere necessario passare da una finestra di dialogo figlio in cui un controllo ha un'impostazione non valida.

È necessario elaborare TCN_edizione Standard LCHANGE per visualizzare la pagina in ingresso nell'area di visualizzazione. Ciò potrebbe comportare semplicemente la modifica delle informazioni visualizzate in una finestra figlio. Più spesso ogni pagina è costituita da una finestra o una finestra di dialogo figlio. In questo caso, un'applicazione potrebbe elaborare questa notifica eliminando o nascondendo la finestra o la finestra di dialogo figlio in uscita e creando o mostrando la finestra di dialogo o la finestra di dialogo figlio in ingresso.

È possibile recuperare e impostare la selezione corrente usando i messaggi TCM_GETCURedizione Standard L e TCM_edizione Standard TCUR edizione Standard L.

Elenchi di immagini del controllo Struttura a schede

A ogni scheda può essere associata un'icona, specificata da un indice nell'elenco di immagini per il controllo struttura a schede. Quando viene creato un controllo struttura a schede, non è associato alcun elenco di immagini. Un'applicazione può creare un elenco di immagini usando la funzione ImageList_Create e quindi assegnarla a un controllo struttura a schede usando il messaggio TCM_edizione Standard TIMAGELIST.

È possibile aggiungere immagini all'elenco di immagini di un controllo struttura a schede esattamente come si farebbe con qualsiasi altro elenco di immagini. Tuttavia, un'applicazione deve rimuovere le immagini usando il messaggio TCM_REMOVEIMAGE anziché la funzione ImageList_Remove. Questo messaggio garantisce che ogni scheda rimanga associata alla stessa immagine di prima.

L'eliminazione di un controllo struttura a schede non elimina definitivamente un elenco di immagini associato. È necessario eliminare definitivamente l'elenco di immagini separatamente. Ciò è utile se si desidera assegnare lo stesso elenco di immagini a più controlli struttura a schede.

Per recuperare l'handle nell'elenco di immagini attualmente associato a un controllo struttura a schede, è possibile utilizzare il messaggio TCM_GETIMAGELIST.

Dimensioni e posizione della scheda

Ogni scheda in un controllo struttura a schede ha dimensioni e posizione. È possibile impostare le dimensioni delle schede, recuperare il rettangolo di delimitazione di una scheda o determinare quale scheda si trova in una posizione specificata.

Per i controlli tabulazioni a larghezza fissa e disegnata dal proprietario, è possibile impostare la larghezza e l'altezza esatte delle schede usando il messaggio TCM_edizione Standard TITEMSIZE. In altri controlli struttura a schede, le dimensioni di ogni scheda vengono calcolate in base all'icona e all'etichetta per la scheda. Il controllo struttura a schede include spazio per un bordo e un margine aggiuntivo. È possibile impostare lo spessore del margine usando il messaggio TCM_edizione Standard TPADDING.

È possibile determinare il rettangolo di delimitazione corrente per una scheda usando il messaggio TCM_GETITEMRECT. È possibile determinare quale scheda, se presente, si trova in una posizione specificata usando il messaggio TCM_HITTEST.

In un controllo struttura a schede con lo stile TCS_MULTILINE è possibile determinare il numero corrente di righe di schede utilizzando il messaggio TCM_GETROWCOUNT.

Schede disegnate dal proprietario

Se un controllo struttura a schede ha lo stile TCS_OWNERDRAWFIXED, la finestra padre deve disegnare schede elaborando il messaggio WM_DRAWITEM. Il controllo struttura a schede invia questo messaggio ogni volta che è necessario disegnare una scheda. Il parametro lParam specifica l'indirizzo di una struttura DRAWITEMSTRUCT , che contiene l'indice della scheda, il relativo rettangolo di delimitazione e il contesto di dispositivo (DC) in cui disegnare.

Per impostazione predefinita, il membro itemData di DRAWITEMSTRUCT contiene il valore del membro lParam della struttura TCITEM. Tuttavia, se si modifica la quantità di dati definiti dall'applicazione per scheda, itemData contiene invece l'indirizzo dei dati. È possibile modificare la quantità di dati definiti dall'applicazione per scheda usando il messaggio TCM_edizione Standard TITEMEXTRA.

Per specificare le dimensioni degli elementi in un controllo struttura a schede, la finestra padre deve elaborare il messaggio di WM_MEASUREITEM . Poiché tutte le schede in un controllo struttura a schede disegnate dal proprietario hanno le stesse dimensioni, questo messaggio viene inviato una sola volta. Non esiste uno stile di controllo struttura a schede per le schede disegnate dal proprietario con dimensioni variabili. È anche possibile impostare la larghezza e l'altezza delle schede usando il messaggio TCM_edizione Standard TITEMSIZE.

Descrizioni comando controllo tabulazioni

È possibile usare un controllo descrizione comando per fornire una breve descrizione di ogni scheda in un controllo struttura a schede. Un controllo struttura a schede con lo stile TCS_TOOLTIPS crea un controllo descrizione comando quando viene creato e distrugge il controllo descrizione comando quando viene eliminato definitivamente. È anche possibile creare un controllo descrizione comando e assegnarlo a un controllo struttura a schede.

Se si usa un controllo descrizione comando con un controllo struttura a schede, la finestra padre deve elaborare il codice di notifica TTN_GETDISPINFO per fornire una descrizione di ogni scheda su richiesta.

Per usare lo stesso controllo descrizione comando con più controlli struttura a schede, creare manualmente il controllo descrizione comando e assegnarlo al controllo struttura a schede usando il messaggio TCM_edizione Standard TTOOLTIPS. È possibile recuperare l'handle nel controllo della descrizione comando corrente di un controllo Struttura a schede usando il messaggio di TCM_GETTOOLTIPS . Se si crea un controllo descrizione comando personalizzato, non è consigliabile usare lo stile TCS_TOOLTIPS.

Elaborazione dei messaggi di controllo scheda predefinita

In questa sezione viene descritta l'elaborazione dei messaggi eseguita da un controllo struttura a schede. I messaggi specifici dei controlli struttura a schede sono illustrati in altre sezioni di questa documentazione.

Message Elaborazione eseguita
WM_CAPTURECHANGED Non esegue alcuna operazione se il controllo struttura a schede ha rilasciato l'acquisizione del mouse. Se un'altra finestra ha acquisito il mouse e viene premuto un pulsante, il comando rilascia il pulsante.
WM_CREATE Alloca e inizializza una struttura di dati interna. Il controllo crea un controllo descrizione comando se viene specificato lo stile TCS_TOOLTIPS.
WM_DESTROY Libera le risorse allocate durante l'elaborazione WM_CREATE .
WM_GETDLGCODE Restituisce una combinazione dei valori DLGC_WANTARROWS e DLGC_WANTCHARS.
WM_GETFONT Restituisce l'handle al tipo di carattere utilizzato per le etichette.
WM_KEYDOWN Elabora i tasti di direzione e modifica la selezione, se appropriato.
WM_KILLFOCUS Invalida la scheda con lo stato attivo in modo che venga ridisegnata per riflettere uno stato non attivo.
WM_LBUTTONDOWN Inoltra il messaggio al controllo descrizione comando, se presente, e modifica la selezione se l'utente fa clic su una scheda. Se l'utente fa clic su un pulsante, il controllo ridisegna il pulsante per dare un aspetto incassato e acquisisce il mouse. Se l'utente fa clic su una scheda o un pulsante e viene specificato lo stile TCS_FOCUSONBUTTONDOWN , il controllo imposta lo stato attivo su se stesso.
WM_LBUTTONUP Rilascia il mouse se è stato premuto un pulsante. Se il cursore si trova sopra il pulsante e si tiene premuto, il controllo modifica la selezione di conseguenza e ridisegna il pulsante.
WM_MOUedizione Standard MOVE Inoltra il messaggio al controllo descrizione comando, se presente. Se viene specificato lo stile TCS_BUTTONS e il pulsante del mouse viene tenuto premuto dopo il clic, il controllo può anche ridisegnare il pulsante interessato per dargli un aspetto sollevato o incassato.
WM_NOTIFY Inoltra i codici di notifica inviati dal controllo descrizione comando.
WM_PAINT Disegna un bordo intorno all'area di visualizzazione (a meno che non venga specificato lo stile TCS_BUTTONS ) e disegna eventuali schede che intersecano il rettangolo non valido. Per ogni scheda, disegna il corpo della scheda (o invia un messaggio WM_DRAWITEM alla finestra padre) e quindi disegna un bordo intorno alla scheda. Se il parametro wParam è diverso da NULL, il controllo presuppone che il valore sia un HDC e disegna utilizzando tale contesto di dispositivo.
WM_RBUTTONDOWN Invia un codice di notifica NM_RCLICK alla finestra padre.
WM_edizione Standard TFOCUS Invalida la scheda con lo stato attivo in modo che venga aggiornata per riflettere uno stato attivo.
WM_edizione Standard TFONT Imposta il tipo di carattere utilizzato per le etichette.
WM_edizione Standard TREDRAW Imposta lo stato di un flag interno che determina se il controllo viene aggiornato quando gli elementi vengono inseriti ed eliminati, quando il tipo di carattere viene modificato e così via.
WM_SIZE Ricalcola le posizioni delle schede e può invalidare parte del controllo struttura a schede per forzare l'aggiornamento di alcune o tutte le schede.