Condividi tramite


Informazioni sulle caselle di riepilogo

Un controllo casella di riepilogo contiene un elenco semplice da cui l'utente può in genere selezionare uno o più elementi. Le caselle di riepilogo offrono una flessibilità limitata rispetto ai controlli Visualizzazione elenco.

Gli elementi della casella di riepilogo possono essere rappresentati da stringhe di testo, bitmap o entrambi. Se la casella di riepilogo non è sufficientemente grande da visualizzare tutte le voci della casella di riepilogo contemporaneamente, la casella di riepilogo fornisce una barra di scorrimento. L'utente scorre le voci della casella di riepilogo e applica o rimuove lo stato di selezione in base alle esigenze. La selezione di un elemento della casella di riepilogo modifica l'aspetto visivo, in genere modificando il testo e i colori di sfondo in quelli specificati dalle metriche del sistema operativo pertinenti. Quando l'utente seleziona o deseleziona un elemento, il sistema invia un messaggio di notifica alla finestra padre della casella di riepilogo.

Per un'applicazione ANSI, il sistema converte il testo in una casella di riepilogo in Unicode usando la tabella codici CP_ACP . Ciò può causare problemi. Ad esempio, i caratteri romani accentati in una casella di riepilogo non Unicode in Windows, la versione giapponese verrà visualizzata in modo infuso. Per risolvere questo problema, compilare l'applicazione come Unicode o usare una casella di riepilogo disegnata dal proprietario.

In questa sezione vengono illustrati gli argomenti seguenti:

Creazione di una casella di riepilogo

Il modo più semplice per creare una casella di riepilogo in una finestra di dialogo consiste nel trascinarlo dalla casella degli strumenti in Microsoft Visual Studio alla risorsa della finestra di dialogo. Per creare una casella di riepilogo in modo dinamico o per creare una casella di riepilogo in una finestra diversa da una finestra di dialogo, utilizzare la funzione CreateWindowEx, specificando la classe della finestra WC_LISTBOX e gli stili di casella di riepilogo appropriati.

Tipi e stili delle caselle di riepilogo

Esistono due tipi di caselle di riepilogo: selezione singola (impostazione predefinita) e selezione multipla. In una casella di riepilogo a selezione singola, l'utente può selezionare un solo elemento alla volta. In una casella di riepilogo a selezione multipla, l'utente può selezionare più di un elemento alla volta. Per creare una casella di riepilogo a selezione multipla, specificare il LBS_MULTIPLEedizione Standard L o lo stile LBS_EXTENDEDedizione Standard L.

L'aspetto e il funzionamento di una casella di riepilogo sono controllati dagli stili e dagli stili di finestra della casella di riepilogo. Questi stili indicano se l'elenco è ordinato, disposto in più colonne, disegnate dall'applicazione e così via. Le dimensioni e gli stili di una casella di riepilogo vengono in genere definiti in un modello di finestra di dialogo incluso nelle risorse di un'applicazione.

Nota

Per usare gli stili di visualizzazione con questi controlli, 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.

Funzioni casella di riepilogo

La funzione DlgDirList sostituisce il contenuto di una casella di riepilogo con i nomi di unità, directory e file che corrispondono a un set specificato di criteri. La funzione DlgDirSelectEx recupera la selezione corrente in una casella di riepilogo inizializzata da DlgDirList. Queste funzioni consentono all'utente di selezionare un'unità, una directory o un file da una casella di riepilogo senza digitare il percorso e il nome del file.

Inoltre, la funzione GetListBoxInfo restituisce il numero di elementi per colonna in una casella di riepilogo specificata.

Messaggi di notifica da caselle di riepilogo

Quando si verifica un evento in una casella di riepilogo, la casella di riepilogo invia un codice di notifica, sotto forma di messaggio WM_COMMAND , alla routine della finestra di dialogo della finestra di proprietario. I codici di notifica della casella di riepilogo vengono inviati quando un utente seleziona, fa doppio clic o annulla una voce di casella di riepilogo; quando la casella di riepilogo riceve o perde lo stato attivo della tastiera; e quando il sistema non può allocare memoria sufficiente per una richiesta di casella di riepilogo. Un messaggio WM_COMMAND contiene l'identificatore della casella di riepilogo nella parola di ordine inferiore del parametro wParam e il codice di notifica nella parola di ordine elevato. Il parametro lParam contiene l'handle della finestra di controllo.

Non è necessaria una procedura di finestra di dialogo per elaborare questi messaggi; la routine della finestra predefinita li elabora.

Un'applicazione deve monitorare ed elaborare i codici di notifica della casella di riepilogo seguenti.

Codice di notifica Descrizione
LBN_DBLCLK L'utente fa doppio clic su un elemento nella casella di riepilogo.
LBN_ERRSPACE La casella di riepilogo non può allocare memoria sufficiente per soddisfare una richiesta.
LBN_KILLFOCUS La casella di riepilogo perde lo stato attivo della tastiera.
LBN_edizione Standard LCANCEL L'utente annulla la selezione di un elemento nella casella di riepilogo.
LBN_edizione Standard LCHANGE La selezione in una casella di riepilogo sta per cambiare.
LBN_edizione Standard TFOCUS La casella di riepilogo riceve lo stato attivo della tastiera.

Messaggi alle caselle di riepilogo

Una procedura di finestra di dialogo può inviare messaggi a una casella di riepilogo per aggiungere, eliminare, esaminare e modificare le voci delle caselle di riepilogo. Ad esempio, una routine della finestra di dialogo potrebbe inviare un messaggio LB_ADDSTRING a una casella di riepilogo per aggiungere un elemento e un messaggio LB_GETedizione Standard L per determinare se l'elemento è selezionato. Altri messaggi impostati e recuperano informazioni sulle dimensioni, l'aspetto e il comportamento della casella di riepilogo. Ad esempio, il messaggio LB_edizione Standard THORIZONTALEXTENT imposta la larghezza scorrevole di una casella di riepilogo. Una routine di finestra di dialogo può inviare qualsiasi messaggio a una casella di riepilogo utilizzando la funzione SendMessage o SendDlgItemMessage.

Un elemento della casella di riepilogo viene spesso fatto riferimento dal relativo indice, un intero che rappresenta la posizione dell'elemento nella casella di riepilogo. L'indice del primo elemento di una casella di riepilogo è 0, l'indice del secondo elemento è 1 e così via.

Nella tabella seguente viene descritto il modo in cui la routine della casella di riepilogo predefinita risponde ai messaggi della casella di riepilogo.

Message Response
LB_ADDFILE Inserisce un file in una casella di riepilogo della directory compilata dalla funzione DlgDirList e recupera l'indice della casella di riepilogo dell'elemento inserito.
LB_ADDSTRING Aggiunge una stringa a una casella di riepilogo e ne restituisce l'indice.
LB_DELETESTRING Rimuove una stringa da una casella di riepilogo e restituisce il numero di stringhe che rimangono nell'elenco.
LB_DIR Aggiunge un elenco di nomi di file a una casella di riepilogo e restituisce l'indice dell'ultimo nome file aggiunto.
LB_FINDSTRING Restituisce l'indice della prima stringa nella casella di riepilogo che inizia con una stringa specificata.
LB_FINDSTRINGEXACT Restituisce l'indice della stringa nella casella di riepilogo uguale a una stringa specificata.
LB_GETANCHORINDEX Restituisce l'indice dell'elemento selezionato per ultimo.
LB_GETCARETINDEX Restituisce l'indice dell'elemento con il rettangolo di stato attivo.
LB_GETCOUNT Restituisce il numero di elementi nella casella di riepilogo.
LB_GETCURedizione Standard L Restituisce l'indice dell'elemento attualmente selezionato.
LB_GETHORIZONTALEXTENT Restituisce la larghezza scorrevole, espressa in pixel, di una casella di riepilogo.
LB_GETITEMDATA Restituisce il valore associato all'elemento specificato.
LB_GETITEMHEIGHT Restituisce l'altezza, in pixel, di un elemento in una casella di riepilogo.
LB_GETITEMRECT Recupera le coordinate client dell'elemento della casella di riepilogo specificata.
LB_GETLOCALE Recupera le impostazioni locali della casella di riepilogo. La parola di ordine elevato contiene il codice paese/area geografica e la parola con ordine basso contiene l'identificatore di lingua.
LB_GETedizione Standard L Restituisce lo stato di selezione di una voce della casella di riepilogo.
LB_GETedizione Standard LCOUNT Restituisce il numero di elementi selezionati in una casella di riepilogo a selezione multipla.
LB_GETedizione Standard LITEMS Crea una matrice degli indici di tutti gli elementi selezionati in una casella di riepilogo a selezione multipla e restituisce il numero totale di elementi selezionati.
LB_GETTEXT Recupera la stringa associata a un elemento specificato e la lunghezza della stringa.
LB_GETTEXTLEN Restituisce la lunghezza, in caratteri, della stringa associata a un elemento specificato.
LB_GETTOPINDEX Restituisce l'indice del primo elemento visibile in una casella di riepilogo.
LB_INITSTORAGE Alloca memoria per il numero specificato di elementi e le relative stringhe associate.
LB_INedizione Standard RTSTRING Inserisce una stringa in corrispondenza di un indice specificato in una casella di riepilogo.
LB_ITEMFROMPOINT Recupera l'indice in base zero dell'elemento più vicino al punto specificato in una casella di riepilogo.
LB_REedizione Standard TCONTENT Rimuove tutti gli elementi da una casella di riepilogo.
LB_edizione Standard LECTSTRING Seleziona la prima stringa trovata che corrisponde a un prefisso specificato.
LB_edizione Standard LITEMRANGE Seleziona un intervallo specificato di elementi in una casella di riepilogo.
LB_edizione Standard LITEMRANG edizione Enterprise X Seleziona un intervallo specificato di elementi se l'indice del primo elemento nell'intervallo è minore dell'indice dell'ultimo elemento nell'intervallo. Annulla la selezione nell'intervallo se l'indice del primo elemento è maggiore dell'ultimo.
LB_edizione Standard TANCHORINDEX Imposta l'elemento che il mouse ha selezionato per ultimo su un elemento specificato.
LB_edizione Standard TCARETINDEX Imposta il rettangolo di stato attivo su un elemento della casella di riepilogo specificato.
LB_edizione Standard TCOLUMNWIDTH Imposta la larghezza, in pixel, di tutte le colonne di una casella di riepilogo.
LB_edizione Standard TCOUNT Imposta il numero di elementi in una casella di riepilogo.
LB_edizione Standard TCUR edizione Standard L Seleziona una voce di casella di riepilogo specificata.
LB_edizione Standard THORIZONTALEXTENT Imposta la larghezza scorrevole, espressa in pixel, di una casella di riepilogo.
LB_edizione Standard TITEMDATA Associa un valore a una voce di casella di riepilogo.
LB_edizione Standard TITEMHEIGHT Imposta l'altezza, in pixel, di un elemento o di elementi in una casella di riepilogo.
LB_edizione Standard TLOCALE Imposta le impostazioni locali di una casella di riepilogo e restituisce l'identificatore delle impostazioni locali precedente.
LB_edizione Standard T edizione Standard L Seleziona un elemento in una casella di riepilogo a selezione multipla.
LB_edizione Standard TTABSTOPS Imposta le tabulazioni su quelle specificate in una matrice specificata.
LB_edizione Standard TTOPINDEX Scorre la casella di riepilogo in modo che l'elemento specificato si trova nella parte superiore dell'intervallo visibile.

Elaborazione dei messaggi finestra predefinita

La routine della finestra per la classe della finestra di riepilogo predefinita esegue l'elaborazione predefinita per tutti i messaggi che la casella di riepilogo non elabora. Quando la routine della casella di riepilogo restituisce FAL edizione Standard per un messaggio, la routine della finestra predefinita controlla il messaggio ed esegue azioni predefinite, come illustrato nella tabella seguente.

Message Azione predefinita
WM_CHAR Sposta la selezione sul primo elemento che inizia con il carattere digitato dall'utente. Se la casella di riepilogo ha lo stile di BS_OWNERDRAW L, non viene eseguita alcuna azione. Più caratteri digitati entro un breve intervallo vengono considerati come un gruppo e viene selezionato il primo elemento che inizia con tale serie di caratteri.
WM_CREATE Crea una casella di riepilogo vuota.
WM_DESTROY Elimina definitivamente la casella di riepilogo e libera tutte le risorse usate.
Passa il messaggio alla routine della finestra di dialogo o al processo della finestra padre.
WM_ENABLE Se il controllo è visibile, invalida il rettangolo in modo che le stringhe possano essere disegnate in grigio.
WM_ERAedizione Standard BKGND Cancella lo sfondo di una casella di riepilogo. Se la casella di riepilogo ha lo stile LBS_OWNERDRAW , lo sfondo non viene cancellato.
WM_GETDLGCODE Restituisce DLGC_WANTARROWS | DLGC_WANTCHARS, che indica che la routine predefinita della casella di riepilogo elabora i tasti di direzione e WM_CHAR messaggi.
WM_GETFONT Restituisce un handle al tipo di carattere corrente per la casella di riepilogo.
WM_HSCROLL Scorre orizzontalmente la casella di riepilogo.
WM_KEYDOWN Elabora le chiavi virtuali per lo scorrimento. La chiave virtuale è l'indice dell'elemento in cui spostare il cursore. La selezione non viene modificata.
WM_KILLFOCUS Disattiva il cursore e lo distrugge. Invia un codice di notifica LBN_KILLFOCUS al proprietario della casella di riepilogo.
WM_LBUTTONDBLCLK Tiene traccia del mouse nell'area client della casella di riepilogo. In questo modo l'utente può annullare una selezione se il pulsante del mouse viene rilasciato all'esterno dell'area client della casella di riepilogo.
WM_LBUTTONDOWN Tiene traccia del mouse nell'area client della casella di riepilogo. In questo modo l'utente può annullare una selezione se il pulsante del mouse viene rilasciato all'esterno dell'area client della casella di riepilogo.
WM_LBUTTONUP Tiene traccia del mouse nell'area client della casella di riepilogo. In questo modo l'utente può annullare una selezione se il pulsante del mouse viene rilasciato all'esterno dell'area client della casella di riepilogo.
WM_MOUedizione Standard MOVE Tiene traccia del mouse nell'area client della casella di riepilogo. In questo modo l'utente può annullare una selezione se il pulsante del mouse viene rilasciato all'esterno dell'area client della casella di riepilogo.
WM_PAINT Esegue un'operazione di disegno sottoclassata utilizzando l'handle casella di riepilogo per il contesto di dispositivo .DC.
WM_edizione Standard TFOCUS Attiva il cursore e invia un codice di notifica LBN_edizione Standard TFOCUS al proprietario della casella di riepilogo.
WM_edizione Standard TFONT Imposta un nuovo tipo di carattere per la casella di riepilogo.
WM_edizione Standard TREDRAW Imposta o cancella il flag di ridisegno in base al valore di wParam.
WM_SIZE Ridimensiona la casella di riepilogo in un numero integrale di elementi.
WM_VSCROLL Scorre verticalmente la casella di riepilogo.

La procedura predefinita della casella di riepilogo passa tutti gli altri messaggi a DefWindowProc per l'elaborazione predefinita.

Caselle di riepilogo disegnate dal proprietario

Un'applicazione può creare una casella di riepilogo disegnata dal proprietario per assumere la responsabilità di disegnare gli elementi dell'elenco. La finestra padre o la finestra di dialogo di una casella di riepilogo disegnata dal proprietario (proprietario) riceve WM_DRAWITEM messaggi quando è necessario disegnare una parte della casella di riepilogo. Una casella di riepilogo disegnata dal proprietario può elencare informazioni diverse da o oltre a stringhe di testo.

Il proprietario di una casella di riepilogo disegnata dal proprietario deve elaborare il messaggio di WM_DRAWITEM . Questo messaggio viene inviato ogni volta che è necessario ridisegnare una parte della casella di riepilogo. Il proprietario potrebbe dover elaborare altri messaggi, a seconda degli stili specificati per la casella di riepilogo.

Un'applicazione può creare una casella di riepilogo disegnata dal proprietario specificando lo stile LBS_OWNERDRAWFIXED o LBS_OWNERDRAWVARIABLE. Se tutte le voci di elenco nella casella di riepilogo hanno la stessa altezza, ad esempio stringhe o icone, un'applicazione può usare lo stile LBS_OWNERDRAWFIXED . Se gli elementi dell'elenco hanno un'altezza variabile ,ad esempio bitmap di dimensioni diverse, un'applicazione può usare lo stile LBS_OWNERDRAWVARIABLE .

Il proprietario di una casella di riepilogo disegnata dal proprietario può elaborare un messaggio WM_MEASUREITEM per specificare le dimensioni delle voci di elenco. Se l'applicazione crea la casella di riepilogo utilizzando lo stile LBS_OWNERDRAWFIXED, il sistema invia il messaggio WM_MEASUREITEM una sola volta. Le dimensioni specificate dal proprietario vengono utilizzate per tutte le voci di elenco. Se viene utilizzato lo stile LBS_OWNERDRAWVARIABLE , il sistema invia un messaggio WM_MEASUREITEM per ogni voce di elenco aggiunta alla casella di riepilogo. Il proprietario può determinare o impostare l'altezza di un elemento di elenco in qualsiasi momento utilizzando rispettivamente i messaggi LB_GETITEMHEIGHT e LB_edizione Standard TITEMHEIGHT.

Se le informazioni visualizzate in una casella di riepilogo disegnata dal proprietario includono testo, un'applicazione può tenere traccia del testo per ogni voce di elenco specificando lo stile LBS_HASSTRINGS. Le caselle di riepilogo con lo stile LBS_SORT vengono ordinate in base a questo testo. Se una casella di riepilogo è ordinata, ma non è dello stile LBS_HASSTRINGS , il proprietario deve elaborare il messaggio di WM_COMPAREITEM .

In una casella di riepilogo disegnata dal proprietario, il proprietario deve tenere traccia delle voci di elenco che contengono informazioni diverse da o oltre al testo. Un modo pratico per eseguire questa operazione consiste nel salvare l'handle nelle informazioni come dati dell'elemento usando il messaggio LB_edizione Standard TITEMDATA. Per liberare gli oggetti dati associati agli elementi in una casella di riepilogo, il proprietario può elaborare il messaggio di WM_DELETEITEM .

Per un esempio di casella di riepilogo disegnata dal proprietario, vedere How to Create an Owner-Drawn List Box.For an example of an owner-drawn list box, see How to Create an Owner-Drawn List Box.

Trascinare caselle di riepilogo

Una casella di riepilogo di trascinamento è un tipo speciale di casella di riepilogo che consente all'utente di trascinare gli elementi da una posizione a un'altra. Un'applicazione può usare una casella di riepilogo di trascinamento per visualizzare le stringhe in una determinata sequenza e consentire all'utente di modificare la sequenza trascinando gli elementi nella posizione.

Creazione di caselle di riepilogo di trascinamento

Le caselle di riepilogo di trascinamento hanno gli stessi stili di finestra ed elaborano gli stessi messaggi delle caselle di riepilogo standard. Per creare una casella di riepilogo di trascinamento, creare prima una casella di riepilogo standard e quindi chiamare la funzione MakeDragList. Per convertire una casella di riepilogo in una finestra di dialogo in una casella di riepilogo di trascinamento, è possibile chiamare MakeDragList quando viene elaborato il messaggio WM_INITDIALOG.

Trascinare messaggi casella di riepilogo

Una casella di riepilogo di trascinamento notifica alla finestra padre degli eventi di trascinamento inviando un messaggio di trascinamento dell'elenco. La finestra padre deve elaborare il messaggio dell'elenco di trascinamento.

La casella di riepilogo di trascinamento registra questo messaggio quando viene chiamata la funzione MakeDragList. Per recuperare l'identificatore di messaggio (valore numerico) del messaggio dell'elenco di trascinamento, chiamare la funzione RegisterWindowMessage e specificare il valore DRAGLISTMSGSTRING.

Il parametro wParam del messaggio dell'elenco di trascinamento è l'identificatore del controllo per la casella di riepilogo di trascinamento. Il parametro lParam è l'indirizzo di una struttura DRAGLISTINFO, che contiene il codice di notifica per l'evento di trascinamento e altre informazioni. Il valore restituito del messaggio dipende dalla notifica.

Trascinare i codici di notifica casella di riepilogo

Il codice di notifica dell'elenco di trascinamento, identificato dal membro uNotification della struttura DRAGLISTINFO incluso nel messaggio dell'elenco di trascinamento, può essere DL_BEGINDRAG, DL_DRAGGING, DL_CANCELDRAG o DL_DROPPED.

Il codice di notifica DL_BEGINDRAG viene inviato quando il cursore si trova su una voce di elenco e l'utente fa clic sul pulsante sinistro del mouse. La finestra padre può restituire TRUE per avviare l'operazione di trascinamento o FAL edizione Standard per impedire il trascinamento. In questo modo, la finestra padre può abilitare il trascinamento per alcuni elementi dell'elenco e disabilitarlo per altri. È possibile determinare quale voce di elenco si trova nella posizione specificata usando la funzione LBItemFromPt.

Se il trascinamento è attivo, il codice di notifica DL_DRAGGING viene inviato ogni volta che il mouse viene spostato o a intervalli regolari se il mouse non viene spostato. La finestra padre deve prima determinare l'elemento dell'elenco sotto il cursore usando LBItemFromPt e quindi disegnare l'icona di inserimento usando la funzione DrawInsert. Specificando TRUE per il parametro bAutoScroll di LBItemFromPt, è possibile far scorrere la casella di riepilogo di una riga se il cursore è sopra o sotto l'area client. Il valore restituito per questa notifica specifica il tipo di cursore del mouse da impostare nella casella di riepilogo di trascinamento.

Il codice di notifica DL_CANCELDRAG viene inviato se l'utente annulla un'operazione di trascinamento facendo clic sul pulsante destro del mouse o premendo ESC. Il codice di notifica DL_DROPPED viene inviato se l'utente completa un'operazione di trascinamento rilasciando il pulsante sinistro del mouse, anche se il cursore non si trova su un elemento dell'elenco. La casella di riepilogo trascinamento rilascia l'acquisizione del mouse prima di inviare una delle notifiche. Il valore restituito di queste due notifiche viene ignorato. Trascina elenco