Classe CListBox
Fornisce la funzionalità di una casella di riepilogo di Windows.
Sintassi
class CListBox : public CWnd
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CListBox::CListBox |
Costruisce un oggetto CListBox . |
Metodi pubblici
Nome | Descrizione |
---|---|
CListBox::AddString |
Aggiunge una stringa a una casella di riepilogo. |
CListBox::CharToItem |
Eseguire l'override per fornire una gestione personalizzata WM_CHAR per le caselle di riepilogo di disegno proprietario che non dispongono di stringhe. |
CListBox::CompareItem |
Chiamato dal framework per determinare la posizione di un nuovo elemento in una casella di riepilogo di disegno proprietario ordinata. |
CListBox::Create |
Crea la casella di riepilogo di Windows e la collega all'oggetto CListBox . |
CListBox::DeleteItem |
Chiamato dal framework quando l'utente elimina un elemento da una casella di riepilogo di disegno proprietario. |
CListBox::DeleteString |
Elimina una stringa da una casella di riepilogo. |
CListBox::Dir |
Aggiunge nomi di file, unità o entrambi dalla directory corrente a una casella di riepilogo. |
CListBox::DrawItem |
Chiamato dal framework quando viene modificato un aspetto visivo di una casella di riepilogo di disegno proprietario. |
CListBox::FindString |
Cerca una stringa in una casella di riepilogo. |
CListBox::FindStringExact |
Trova la prima stringa della casella di riepilogo corrispondente a una stringa specificata. |
CListBox::GetAnchorIndex |
Recupera l'indice in base zero dell'elemento di ancoraggio corrente in una casella di riepilogo. |
CListBox::GetCaretIndex |
Determina l'indice dell'elemento con il rettangolo di attivazione in una casella di riepilogo a selezione multipla. |
CListBox::GetCount |
Restituisce il numero di stringhe in una casella di riepilogo. |
CListBox::GetCurSel |
Restituisce l'indice in base zero della stringa attualmente selezionata in una casella di riepilogo. |
CListBox::GetHorizontalExtent |
Restituisce la larghezza in pixel di cui è possibile scorrere orizzontalmente una casella di riepilogo. |
CListBox::GetItemData |
Restituisce un valore associato all'elemento della casella di riepilogo. |
CListBox::GetItemDataPtr |
Restituisce un puntatore a un elemento della casella di riepilogo. |
CListBox::GetItemHeight |
Determina l'altezza degli elementi in una casella di riepilogo. |
CListBox::GetItemRect |
Restituisce il rettangolo di delimitazione dell'elemento della casella di riepilogo così come è attualmente visualizzato. |
CListBox::GetListBoxInfo |
Recupera il numero di elementi per colonna. |
CListBox::GetLocale |
Recupera l'identificatore delle impostazioni locali per una casella di riepilogo. |
CListBox::GetSel |
Restituisce lo stato di selezione di un elemento della casella di riepilogo. |
CListBox::GetSelCount |
Restituisce il numero di stringhe attualmente selezionate in una casella di riepilogo a selezione multipla. |
CListBox::GetSelItems |
Restituisce gli indici delle stringhe attualmente selezionate in una casella di riepilogo. |
CListBox::GetText |
Copia un elemento della casella di riepilogo in un buffer. |
CListBox::GetTextLen |
Restituisce la lunghezza in byte di un elemento della casella di riepilogo. |
CListBox::GetTopIndex |
Restituisce l'indice della prima stringa visibile in una casella di riepilogo. |
CListBox::InitStorage |
Prealloca blocchi di memoria per voci e stringhe della casella di riepilogo. |
CListBox::InsertString |
Inserisce una stringa in una posizione specifica in una casella di riepilogo. |
CListBox::ItemFromPoint |
Restituisce l'indice dell'elemento della casella di riepilogo più vicino a un punto. |
CListBox::MeasureItem |
Chiamato dal framework quando viene creata una casella di riepilogo di disegno proprietario per determinare le dimensioni della casella di riepilogo. |
CListBox::ResetContent |
Cancella tutte le voci da una casella di riepilogo. |
CListBox::SelectString |
Cerca e seleziona una stringa in una casella di riepilogo a selezione singola. |
CListBox::SelItemRange |
Seleziona o deseleziona un intervallo di stringhe in una casella di riepilogo a selezione multipla. |
CListBox::SetAnchorIndex |
Imposta l'ancoraggio in una casella di riepilogo a selezione multipla per iniziare una selezione estesa. |
CListBox::SetCaretIndex |
Imposta il rettangolo di attivazione sull'elemento in corrispondenza dell'indice specificato in una casella di riepilogo a selezione multipla. |
CListBox::SetColumnWidth |
Imposta la larghezza della colonna di una casella di riepilogo a più colonne. |
CListBox::SetCurSel |
Seleziona una stringa della casella di riepilogo. |
CListBox::SetHorizontalExtent |
Imposta la larghezza in pixel di cui è possibile scorrere orizzontalmente una casella di riepilogo. |
CListBox::SetItemData |
Imposta un valore associato all'elemento della casella di riepilogo. |
CListBox::SetItemDataPtr |
Imposta un puntatore all'elemento della casella di riepilogo. |
CListBox::SetItemHeight |
Imposta l'altezza degli elementi in una casella di riepilogo. |
CListBox::SetLocale |
Imposta l'identificatore delle impostazioni locali per una casella di riepilogo. |
CListBox::SetSel |
Seleziona o deseleziona un elemento della casella di riepilogo in una casella di riepilogo a selezione multipla. |
CListBox::SetTabStops |
Imposta le posizioni di tabulazione in una casella di riepilogo. |
CListBox::SetTopIndex |
Imposta l'indice in base zero della prima stringa visibile in una casella di riepilogo. |
CListBox::VKeyToItem |
Eseguire l'override per fornire una gestione personalizzata WM_KEYDOWN per le caselle di riepilogo con il LBS_WANTKEYBOARDINPUT set di stili. |
Osservazioni:
In una casella di riepilogo viene visualizzato un elenco di elementi, ad esempio nomi file, che l'utente può visualizzare e selezionare.
In una casella di riepilogo a selezione singola l'utente può selezionare un solo elemento. In una casella di riepilogo a selezione multipla è possibile selezionare un intervallo di elementi. Quando l'utente seleziona un elemento, viene evidenziato e la casella di riepilogo invia un messaggio di notifica alla finestra padre.
È possibile creare una casella di riepilogo da un modello di finestra di dialogo o direttamente nel codice. Per crearlo direttamente, costruire l'oggetto CListBox
, quindi chiamare la Create
funzione membro per creare il controllo Casella di riepilogo di Windows e collegarlo all'oggetto CListBox
. Per usare una casella di riepilogo in un modello di finestra di dialogo, dichiarare una variabile casella di riepilogo nella classe della finestra di dialogo, quindi usare DDX_Control
nella funzione della classe della finestra di DoDataExchange
dialogo per connettere la variabile membro al controllo. Questa operazione viene eseguita automaticamente quando si aggiunge una variabile di controllo alla classe della finestra di dialogo.
La costruzione può essere un processo in un unico passaggio in una classe derivata da CListBox
. Scrivere un costruttore per la classe derivata e chiamare Create
dall'interno del costruttore.
Se si desidera gestire i messaggi di notifica di Windows inviati da una casella di riepilogo al relativo padre (in genere una classe derivata da CDialog
), aggiungere una voce della mappa messaggi e una funzione membro del gestore messaggi alla classe padre per ogni messaggio.
Ogni voce della mappa messaggi ha il formato seguente:
ON_Notification( id, memberFxn )
dove id
specifica l'ID finestra figlio del controllo list-box che invia la notifica e memberFxn
è il nome della funzione membro padre scritta per gestire la notifica.
Il prototipo della funzione padre è il seguente:
afx_msg void memberFxn( );
Di seguito è riportato un elenco di potenziali voci della mappa messaggi e una descrizione dei casi in cui verrebbero inviati all'elemento padre:
ON_LBN_DBLCLK
L'utente fa doppio clic su una stringa in una casella di riepilogo. Solo una casella di riepilogo con loLBS_NOTIFY
stile invierà questo messaggio di notifica.ON_LBN_ERRSPACE
La casella di riepilogo non può allocare memoria sufficiente per soddisfare la richiesta.ON_LBN_KILLFOCUS
La casella di riepilogo sta perdendo lo stato attivo per l'input.ON_LBN_SELCANCEL
La selezione corrente della casella di riepilogo viene annullata. Questo messaggio viene inviato solo quando una casella di riepilogo ha loLBS_NOTIFY
stile.ON_LBN_SELCHANGE
La selezione nella casella di riepilogo è stata modificata. Questa notifica non viene inviata se la selezione viene modificata dallaCListBox::SetCurSel
funzione membro. Questa notifica si applica solo a una casella di riepilogo con loLBS_NOTIFY
stile . IlLBN_SELCHANGE
messaggio di notifica viene inviato per una casella di riepilogo a selezione multipla ogni volta che l'utente preme un tasto freccia, anche se la selezione non cambia.ON_LBN_SETFOCUS
La casella di riepilogo riceve lo stato attivo per l'input.ON_WM_CHARTOITEM
Una casella di riepilogo di disegno proprietario senza stringhe riceve unWM_CHAR
messaggio.ON_WM_VKEYTOITEM
Una casella di riepilogo con loLBS_WANTKEYBOARDINPUT
stile riceve unWM_KEYDOWN
messaggio.
Se si crea un CListBox
oggetto all'interno di una finestra di dialogo (tramite una risorsa di dialogo), l'oggetto CListBox
viene eliminato automaticamente quando l'utente chiude la finestra di dialogo.
Se si crea un CListBox
oggetto all'interno di una finestra, potrebbe essere necessario eliminare definitivamente l'oggetto CListBox
. Se si crea l'oggetto CListBox
nello stack, viene eliminato automaticamente. Se si crea l'oggetto nell'heap CListBox
usando la new
funzione , è necessario chiamare delete
sull'oggetto per distruggerlo quando l'utente chiude la finestra padre.
Se si alloca memoria nell'oggetto, eseguire l'override CListBox
del CListBox
distruttore per eliminare l'allocazione.
Gerarchia di ereditarietà
CListBox
Requisiti
Intestazione: afxwin.h
CListBox::AddString
Aggiunge una stringa a una casella di riepilogo.
int AddString(LPCTSTR lpszItem);
Parametri
lpszItem
Punta alla stringa con terminazione Null da aggiungere.
Valore restituito
Indice in base zero della stringa nella casella di riepilogo. Il valore restituito è LB_ERR
se si verifica un errore. Il valore restituito è LB_ERRSPACE
se è disponibile spazio insufficiente per archiviare la nuova stringa.
Osservazioni:
Se la casella di riepilogo non è stata creata con lo LBS_SORT
stile, la stringa viene aggiunta alla fine dell'elenco. In caso contrario, la stringa viene inserita nell'elenco e l'elenco viene ordinato. Se la casella di riepilogo è stata creata con lo LBS_SORT
stile ma non con lo LBS_HASSTRINGS
stile, il framework ordina l'elenco in base a una o più chiamate alla CompareItem
funzione membro.
Utilizzare InsertString
per inserire una stringa in una posizione specifica all'interno della casella di riepilogo.
Esempio
// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
str.Format(_T("item string %d"), i);
m_myListBox.AddString(str);
}
CListBox::CharToItem
Chiamato dal framework quando la finestra padre della casella di riepilogo riceve un WM_CHARTOITEM
messaggio dalla casella di riepilogo.
virtual int CharToItem(
UINT nKey,
UINT nIndex);
Parametri
nKey
Codice ANSI del carattere digitato dall'utente.
nIndex
Posizione corrente del cursore casella di riepilogo.
Valore restituito
Restituisce - 1 o - 2 per nessun'altra azione o un numero non negativo per specificare un indice di un elemento della casella di riepilogo su cui eseguire l'azione predefinita per la sequenza di tasti. L'implementazione predefinita restituisce - 1.
Osservazioni:
Il WM_CHARTOITEM
messaggio viene inviato dalla casella di riepilogo quando riceve un WM_CHAR
messaggio, ma solo se la casella di riepilogo soddisfa tutti questi criteri:
Casella di riepilogo di disegno proprietario.
Il set di stili non è
LBS_HASSTRINGS
impostato.Contiene almeno un elemento.
Non chiamare mai questa funzione manualmente. Eseguire l'override di questa funzione per fornire una gestione personalizzata dei messaggi da tastiera.
Nell'override è necessario restituire un valore per indicare al framework l'azione eseguita. Un valore restituito - 1 o - 2 indica che sono stati gestiti tutti gli aspetti della selezione dell'elemento e non richiede ulteriori azioni dalla casella di riepilogo. Prima di tornare - 1 o - 2, è possibile impostare la selezione o spostare il cursore o entrambi. Per impostare la selezione, usare SetCurSel
o SetSel
. Per spostare il cursore, usare SetCaretIndex
.
Il valore restituito 0 o maggiore specifica l'indice di un elemento nella casella di riepilogo e indica che la casella di riepilogo deve eseguire l'azione predefinita per la sequenza di tasti sull'elemento specificato.
Esempio
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic key. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CharToItem(UINT nChar, UINT nIndex)
{
// On a numeric key, move the caret up one item.
if (isdigit(nChar) && (nIndex > 0))
{
SetCaretIndex(nIndex - 1);
}
// On an alphabetic key, move the caret down one item.
else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex + 1);
}
// Do not perform any default processing.
return -1;
}
CListBox::CListBox
Costruisce un oggetto CListBox
.
CListBox();
Osservazioni:
Si costruisce un CListBox
oggetto in due passaggi. Prima di tutto, chiamare il costruttore ClistBox
e quindi chiamare Create
, che inizializza la casella di riepilogo di Windows e la associa all'oggetto CListBox
.
Esempio
// Declare a local CListBox object.
CListBox myListBox;
// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;
CListBox::CompareItem
Chiamato dal framework per determinare la posizione relativa di un nuovo elemento in una casella di riepilogo di disegno proprietario ordinata.
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
Parametri
lpCompareItemStruct
Puntatore lungo a una COMPAREITEMSTRUCT
struttura.
Valore restituito
Indica la posizione relativa dei due elementi descritti nella COMPAREITEMSTRUCT
struttura. Può trattarsi di uno dei valori seguenti:
Valore | Significato |
---|---|
-1 | L'elemento 1 ordina prima dell'elemento 2. |
0 | L'elemento 1 e l'elemento 2 ordinano lo stesso. |
1 | L'elemento 1 viene ordinato dopo l'elemento 2. |
Vedere CWnd::OnCompareItem
per una descrizione della COMPAREITEMSTRUCT
struttura.
Osservazioni:
Per impostazione predefinita, questa funzione membro non esegue alcuna operazione. Se si crea una casella di riepilogo di disegno proprietario con lo stile, è necessario eseguire l'override LBS_SORT
di questa funzione membro per facilitare il framework nell'ordinamento di nuovi elementi aggiunti alla casella di riepilogo.
Esempio
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example compares two items using _tcscmp to sort items in reverse
// alphabetical order. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
ASSERT(lpCompareItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
ASSERT(lpszText1 != NULL);
LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
ASSERT(lpszText2 != NULL);
return _tcscmp(lpszText2, lpszText1);
}
CListBox::Create
Crea la casella di riepilogo di Windows e la collega all'oggetto CListBox
.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parametri
dwStyle
Specifica lo stile della casella di riepilogo. Applicare qualsiasi combinazione di stili casella di riepilogo alla casella.
rect
Specifica le dimensioni e la posizione della casella di riepilogo. Può essere un CRect
oggetto o una RECT
struttura.
pParentWnd
Specifica la finestra padre della casella di riepilogo (in genere un CDialog
oggetto). Non deve essere NULL
.
nID
Specifica l'ID di controllo della casella di riepilogo.
Valore restituito
Diverso da zero se ha esito positivo; in caso contrario 0.
Osservazioni:
Si costruisce un CListBox
oggetto in due passaggi. Chiamare innanzitutto il costruttore e quindi chiamare Create
, che inizializza la casella di riepilogo di Windows e la associa all'oggetto CListBox
.
Quando Create
viene eseguito, Windows invia i WM_NCCREATE
messaggi , WM_CREATE
, WM_NCCALCSIZE
e WM_GETMINMAXINFO
al controllo casella di riepilogo.
Questi messaggi vengono gestiti per impostazione predefinita dalle OnNcCreate
funzioni membro , OnCreate
OnNcCalcSize
, e OnGetMinMaxInfo
nella CWnd
classe base. Per estendere la gestione predefinita dei messaggi, derivare una classe da CListBox
, aggiungere una mappa messaggi alla nuova classe ed eseguire l'override delle funzioni membro del gestore di messaggi precedenti. Eseguire l'override OnCreate
, ad esempio, per eseguire l'inizializzazione necessaria per una nuova classe.
Applicare gli stili di finestra seguenti a un controllo casella di riepilogo.
WS_CHILD
SempreWS_VISIBLE
SolitamenteWS_DISABLED
RaramenteWS_VSCROLL
Per aggiungere una barra di scorrimento verticaleWS_HSCROLL
Per aggiungere una barra di scorrimento orizzontaleWS_GROUP
Per raggruppare i controlliWS_TABSTOP
Per consentire la tabulazione a questo controllo
Esempio
// pParentWnd is a pointer to the parent window.
m_myListBox.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_HSCROLL,
CRect(10, 10, 200, 200), pParentWnd, IDC_MYLISTBOX);
CListBox::DeleteItem
Chiamato dal framework quando l'utente elimina un elemento da un oggetto di disegno CListBox
proprietario o elimina definitivamente la casella di riepilogo.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Parametri
lpDeleteItemStruct
Puntatore lungo a una struttura di Windows DELETEITEMSTRUCT
che contiene informazioni sull'elemento eliminato.
Osservazioni:
L'implementazione predefinita di questa funzione non esegue alcuna operazione. Eseguire l'override di questa funzione per ridisegnare una casella di riepilogo di disegno proprietario in base alle esigenze.
Vedere CWnd::OnDeleteItem
per una descrizione della DELETEITEMSTRUCT
struttura.
Esempio
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example simply frees the item's text. The list box control was created
// with the following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
ASSERT(lpDeleteItemStruct->CtlType == ODT_LISTBOX);
LPVOID lpszText = (LPVOID)lpDeleteItemStruct->itemData;
ASSERT(lpszText != NULL);
free(lpszText);
CListBox::DeleteItem(lpDeleteItemStruct);
}
CListBox::DeleteString
Elimina l'elemento nella posizione nIndex
dalla casella di riepilogo.
int DeleteString(UINT nIndex);
Parametri
nIndex
Specifica l'indice in base zero della stringa da eliminare.
Valore restituito
Conteggio delle stringhe rimanenti nell'elenco. Il valore restituito è LB_ERR
se nIndex
specifica un indice maggiore del numero di elementi nell'elenco.
Osservazioni:
Tutti gli elementi che seguono nIndex
ora spostano verso il basso una posizione. Ad esempio, se una casella di riepilogo contiene due elementi, l'eliminazione del primo elemento farà sì che l'elemento rimanente sia ora nella prima posizione. nIndex
=0 per l'elemento nella prima posizione.
Esempio
// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.DeleteString(i);
}
CListBox::Dir
Aggiunge un elenco di nomi file, unità o entrambi a una casella di riepilogo.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Parametri
attr
Può essere qualsiasi combinazione dei enum
valori descritti in CFile::GetStatus
o qualsiasi combinazione dei valori seguenti:
Valore | Significato |
---|---|
0x0000 | Il file può essere letto o scritto in . |
0x0001 | Il file può essere letto da ma non scritto in. |
0x0002 | Il file è nascosto e non viene visualizzato in un elenco di directory. |
0x0004 | Il file è un file di sistema. |
0x0010 | Il nome specificato da lpszWildCard specifica una directory. |
0x0020 | Il file è stato archiviato. |
0x4000 | Includere tutte le unità che corrispondono al nome specificato da lpszWildCard . |
0x8000 | Flag esclusivo. Se il flag esclusivo è impostato, vengono elencati solo i file del tipo specificato. In caso contrario, i file del tipo specificato vengono elencati oltre ai file "normali". |
lpszWildCard
Punta a una stringa di specifica del file. La stringa può contenere caratteri jolly( ad esempio *.*).
Valore restituito
Indice in base zero dell'ultimo nome file aggiunto all'elenco. Il valore restituito è LB_ERR
se si verifica un errore. Il valore restituito è LB_ERRSPACE
se è disponibile spazio insufficiente per archiviare le nuove stringhe.
Esempio
// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
::GetWindowsDirectory(lpszWinPath, MAX_PATH);
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);
m_myListBox.ResetContent();
m_myListBox.Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));
::SetCurrentDirectory(lpszOldPath);
CListBox::DrawItem
Chiamato dal framework quando viene modificato un aspetto visivo di una casella di riepilogo di disegno proprietario.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parametri
lpDrawItemStruct
Puntatore lungo a una DRAWITEMSTRUCT
struttura che contiene informazioni sul tipo di disegno richiesto.
Osservazioni:
I itemAction
membri e itemState
della DRAWITEMSTRUCT
struttura definiscono l'azione di disegno da eseguire.
Per impostazione predefinita, questa funzione membro non esegue alcuna operazione. Eseguire l'override di questa funzione membro per implementare il disegno per un oggetto di disegno CListBox
proprietario. L'applicazione deve ripristinare tutti gli oggetti GDI (Graphics Device Interface) selezionati per il contesto di visualizzazione fornito in lpDrawItemStruct
prima che questa funzione membro termini.
Vedere CWnd::OnDrawItem
per una descrizione della DRAWITEMSTRUCT
struttura.
Esempio
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example draws an item's text centered vertically and horizontally. The
// list box control was created with the following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Also, erase
// rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem,
::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// If this item has the focus, draw a red frame around the
// item's rect.
if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
(lpDrawItemStruct->itemState & ODS_FOCUS))
{
CBrush br(RGB(255, 0, 0));
dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
CListBox::FindString
Trova la prima stringa in una casella di riepilogo contenente il prefisso specificato senza modificare la selezione della casella di riepilogo.
int FindString(
int nStartAfter,
LPCTSTR lpszItem) const;
Parametri
nStartAfter
Contiene l'indice in base zero dell'elemento prima della ricerca del primo elemento. Quando la ricerca raggiunge la parte inferiore della casella di riepilogo, continua dalla parte superiore della casella di riepilogo all'elemento specificato da nStartAfter
. Se nStartAfter
è -1, viene eseguita la ricerca dell'intera casella di riepilogo dall'inizio.
lpszItem
Punta alla stringa con terminazione Null contenente il prefisso da cercare. La ricerca è indipendente dal caso, quindi questa stringa può contenere qualsiasi combinazione di lettere maiuscole e minuscole.
Valore restituito
Indice in base zero dell'elemento corrispondente o LB_ERR
se la ricerca non è riuscita.
Osservazioni:
Usare la SelectString
funzione membro per trovare e selezionare una stringa.
Esempio
// The string to match.
LPCTSTR lpszmyString = _T("item");
// Delete all items that begin with the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindString(nIndex, lpszmyString)) != LB_ERR)
{
m_myListBox.DeleteString(nIndex);
}
CListBox::FindStringExact
Trova la prima stringa della casella di riepilogo corrispondente alla stringa specificata in lpszFind
.
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
Parametri
nIndexStart
Specifica l'indice in base zero dell'elemento prima della ricerca del primo elemento. Quando la ricerca raggiunge la parte inferiore della casella di riepilogo, continua dalla parte superiore della casella di riepilogo all'elemento specificato da nIndexStart
. Se nIndexStart
è -1, viene eseguita la ricerca dell'intera casella di riepilogo dall'inizio.
lpszFind
Punta alla stringa con terminazione Null da cercare. Questa stringa può contenere un nome file completo, inclusa l'estensione. La ricerca non fa distinzione tra maiuscole e minuscole, quindi la stringa può contenere qualsiasi combinazione di lettere maiuscole e minuscole.
Valore restituito
Indice dell'elemento corrispondente o LB_ERR
se la ricerca non è riuscita.
Osservazioni:
Se la casella di riepilogo è stata creata con uno stile di disegno proprietario ma senza lo LBS_HASSTRINGS
stile, la FindStringExact
funzione membro tenta di trovare la corrispondenza con il valore doubleword rispetto al valore di lpszFind
.
Esempio
// The string to match.
LPCTSTR lpszmyString = _T("item string 3");
// Delete all items that exactly match the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindStringExact(nIndex, lpszmyString)) != LB_ERR)
{
m_myListBox.DeleteString(nIndex);
}
CListBox::GetAnchorIndex
Recupera l'indice in base zero dell'elemento di ancoraggio corrente nella casella di riepilogo.
int GetAnchorIndex() const;
Valore restituito
Indice dell'elemento di ancoraggio corrente, se riuscito; in caso contrario, LB_ERR.
Osservazioni:
In una casella di riepilogo a selezione multipla, l'elemento di ancoraggio è il primo o l'ultimo elemento in un blocco di elementi selezionati contigui.
Esempio
Vedere l'esempio per CListBox::SetAnchorIndex
.
CListBox::GetCaretIndex
Determina l'indice dell'elemento con il rettangolo di attivazione in una casella di riepilogo a selezione multipla.
int GetCaretIndex() const;
Valore restituito
Indice in base zero dell'elemento con il rettangolo di stato attivo in una casella di riepilogo. Se la casella di riepilogo è una casella di riepilogo a selezione singola, il valore restituito è l'indice dell'elemento selezionato, se presente.
Osservazioni:
L'elemento può essere selezionato o meno.
Esempio
Vedere l'esempio per CListBox::SetCaretIndex
.
CListBox::GetCount
Recupera il numero di elementi in una casella di riepilogo.
int GetCount() const;
Valore restituito
Numero di elementi nella casella di riepilogo o LB_ERR
se si verifica un errore.
Osservazioni:
Il conteggio restituito è maggiore del valore di indice dell'ultimo elemento (l'indice è in base zero).
Esempio
// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
str.Format(_T("item %d"), i);
m_myListBox.AddString(str);
}
// Verify that 10 items were added to the list box.
ASSERT(m_myListBox.GetCount() == 10);
CListBox::GetCurSel
Recupera l'indice in base zero dell'elemento attualmente selezionato, se presente, in una casella di riepilogo a selezione singola.
int GetCurSel() const;
Valore restituito
Indice in base zero dell'elemento attualmente selezionato se si tratta di una casella di riepilogo a selezione singola. È LB_ERR
se non è attualmente selezionato alcun elemento.
In una casella di riepilogo a selezione multipla l'indice dell'elemento con lo stato attivo.
Osservazioni:
Non chiamare GetCurSel
una casella di riepilogo a selezione multipla. Utilizzare invece CListBox::GetSelItems
.
Esempio
// Select the next item of the currently selected one.
int nIndex = m_myListBox.GetCurSel();
int nCount = m_myListBox.GetCount();
if ((nIndex != LB_ERR) && (nCount > 1))
{
if (++nIndex < nCount)
m_myListBox.SetCurSel(nIndex);
else
m_myListBox.SetCurSel(0);
}
CListBox::GetHorizontalExtent
Recupera dalla casella di riepilogo la larghezza in pixel in base alla quale è possibile scorrere orizzontalmente.
int GetHorizontalExtent() const;
Valore restituito
Larghezza scorrevole della casella di riepilogo, espressa in pixel.
Osservazioni:
Questa opzione è applicabile solo se la casella di riepilogo ha una barra di scorrimento orizzontale.
Esempio
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
m_myListBox.ReleaseDC(pDC);
// Set the horizontal extent only if the current extent is not large enough.
if (m_myListBox.GetHorizontalExtent() < dx)
{
m_myListBox.SetHorizontalExtent(dx);
ASSERT(m_myListBox.GetHorizontalExtent() == dx);
}
CListBox::GetItemData
Recupera il valore doubleword fornito dall'applicazione associato all'elemento della casella di riepilogo specificato.
DWORD_PTR GetItemData(int nIndex) const;
Parametri
nIndex
Specifica l'indice in base zero dell'elemento nella casella di riepilogo.
Valore restituito
Valore associato all'elemento o LB_ERR
se si verifica un errore.
Osservazioni:
Il valore doubleword è il dwItemData
parametro di una SetItemData
chiamata.
Esempio
// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
if (m_myListBox.GetItemData(i) == 0)
{
m_myListBox.SetItemData(i, (DWORD)-1);
}
}
CListBox::GetItemDataPtr
Recupera il valore a 32 bit fornito dall'applicazione associato all'elemento della casella di riepilogo specificato come puntatore (void
*).
void* GetItemDataPtr(int nIndex) const;
Parametri
nIndex
Specifica l'indice in base zero dell'elemento nella casella di riepilogo.
Valore restituito
Recupera un puntatore o -1 se si verifica un errore.
Esempio
LPVOID lpmyPtr = pParentWnd;
// Check all the items in the list box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
if (m_myListBox.GetItemDataPtr(i) == lpmyPtr)
{
m_myListBox.SetItemDataPtr(i, NULL);
}
}
CListBox::GetItemHeight
Determina l'altezza degli elementi in una casella di riepilogo.
int GetItemHeight(int nIndex) const;
Parametri
nIndex
Specifica l'indice in base zero dell'elemento nella casella di riepilogo. Questo parametro viene utilizzato solo se la casella di riepilogo ha lo LBS_OWNERDRAWVARIABLE
stile; in caso contrario, deve essere impostata su 0.
Valore restituito
Altezza, in pixel, degli elementi nella casella di riepilogo. Se la casella di riepilogo ha lo LBS_OWNERDRAWVARIABLE
stile , il valore restituito corrisponde all'altezza dell'elemento specificato da nIndex
. Se si verifica un errore, il valore restituito è LB_ERR
.
Esempio
// Set the height of every item so the item
// is completely visible.
CString str;
CSize sz;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
// Only want to set the item height if the current height
// is not big enough.
if (m_myListBox.GetItemHeight(i) < sz.cy)
m_myListBox.SetItemHeight(i, sz.cy);
}
m_myListBox.ReleaseDC(pDC);
CListBox::GetItemRect
Recupera le dimensioni del rettangolo che delimita un elemento della casella di riepilogo così come è attualmente visualizzato nella finestra della casella di riepilogo.
int GetItemRect(
int nIndex,
LPRECT lpRect) const;
Parametri
nIndex
Specifica l'indice in base zero dell'elemento.
lpRect
Specifica un puntatore lungo a una RECT
struttura che riceve le coordinate client della casella di riepilogo dell'elemento.
Valore restituito
LB_ERR
se si verifica un errore.
Esempio
// Dump all of the items bounds.
CString str;
RECT r;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetItemRect(i, &r);
str.Format(_T("item %d: left = %d, top = %d, right = %d, ")
_T("bottom = %d\r\n"),
i,
r.left,
r.top,
r.right,
r.bottom);
AFXDUMP(str);
}
CListBox::GetListBoxInfo
Recupera il numero di elementi per colonna.
DWORD GetListBoxInfo() const;
Valore restituito
Numero di elementi per colonna dell'oggetto CListBox
.
Osservazioni:
Questa funzione membro emula la funzionalità del LB_GETLISTBOXINFO
messaggio, come descritto in Windows SDK.
CListBox::GetLocale
Recupera le impostazioni locali utilizzate dalla casella di riepilogo.
LCID GetLocale() const;
Valore restituito
Valore dell'identificatore delle impostazioni locali (LCID) per le stringhe nella casella di riepilogo.
Osservazioni:
Le impostazioni locali vengono utilizzate, ad esempio, per determinare l'ordinamento delle stringhe in una casella di riepilogo ordinata.
Esempio
Vedere l'esempio per CListBox::SetLocale
.
CListBox::GetSel
Recupera lo stato di selezione di un elemento.
int GetSel(int nIndex) const;
Parametri
nIndex
Specifica l'indice in base zero dell'elemento.
Valore restituito
Numero positivo se l'elemento specificato è selezionato; in caso contrario, è 0. Il valore restituito è LB_ERR
se si verifica un errore.
Osservazioni:
Questa funzione membro funziona con caselle di riepilogo a selezione singola e multipla.
Per recuperare l'indice dell'elemento della casella di riepilogo attualmente selezionata, utilizzare CListBox::GetCurSel
.
Esempio
// Dump all of the items select state.
CString str;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
str.Format(_T("item %d: select state is %s\r\n"),
i,
m_myListBox.GetSel(i) > 0 ? _T("true") : _T("false"));
AFXDUMP(str);
}
CListBox::GetSelCount
Recupera il numero totale di elementi selezionati in una casella di riepilogo a selezione multipla.
int GetSelCount() const;
Valore restituito
Numero di elementi selezionati in una casella di riepilogo. Se la casella di riepilogo è una casella di riepilogo a selezione singola, il valore restituito è LB_ERR
.
Esempio
Vedere l'esempio per CListBox::GetSelItems
.
CListBox::GetSelItems
Riempie un buffer con una matrice di numeri interi che specifica i numeri di elemento degli elementi selezionati in una casella di riepilogo a selezione multipla.
int GetSelItems(
int nMaxItems,
LPINT rgIndex) const;
Parametri
nMaxItems
Specifica il numero massimo di elementi selezionati i cui numeri di elemento devono essere inseriti nel buffer.
rgIndex
Specifica un puntatore a un buffer sufficientemente grande per il numero di interi specificati da nMaxItems
.
Valore restituito
Numero effettivo di elementi inseriti nel buffer. Se la casella di riepilogo è una casella di riepilogo a selezione singola, il valore restituito è LB_ERR
.
Esempio
// Get the indexes of all the selected items.
int nCount = m_myODListBox.GetSelCount();
CArray<int, int> aryListBoxSel;
aryListBoxSel.SetSize(nCount);
m_myODListBox.GetSelItems(nCount, aryListBoxSel.GetData());
// Dump the selection array.
AFXDUMP(aryListBoxSel);
CListBox::GetText
Ottiene una stringa da una casella di riepilogo.
int GetText(
int nIndex,
LPTSTR lpszBuffer) const;
void GetText(
int nIndex,
CString& rString) const;
Parametri
nIndex
Specifica l'indice in base zero della stringa da recuperare.
lpszBuffer
Punta al buffer che riceve la stringa. Il buffer deve avere spazio sufficiente per la stringa e un carattere Null di terminazione. Le dimensioni della stringa possono essere determinate in anticipo chiamando la GetTextLen
funzione membro.
rString
Riferimento a un oggetto CString
.
Valore restituito
Lunghezza (in byte) della stringa, escluso il carattere Null di terminazione. Se nIndex
non specifica un indice valido, il valore restituito è LB_ERR
.
Osservazioni:
Il secondo formato di questa funzione membro riempie un CString
oggetto con il testo stringa.
Esempio
// Dump all of the items in the list box.
CString str, str2;
int n;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
n = m_myListBox.GetTextLen(i);
m_myListBox.GetText(i, str.GetBuffer(n));
str.ReleaseBuffer();
str2.Format(_T("item %d: %s\r\n"), i, str.GetBuffer(0));
AFXDUMP(str2);
}
CListBox::GetTextLen
Ottiene la lunghezza di una stringa in un elemento della casella di riepilogo.
int GetTextLen(int nIndex) const;
Parametri
nIndex
Specifica l'indice in base zero della stringa.
Valore restituito
Lunghezza della stringa in caratteri, escluso il carattere Null di terminazione. Se nIndex
non specifica un indice valido, il valore restituito è LB_ERR
.
Esempio
Vedere l'esempio per CListBox::GetText
.
CListBox::GetTopIndex
Recupera l'indice in base zero del primo elemento visibile in una casella di riepilogo.
int GetTopIndex() const;
Valore restituito
Indice in base zero del primo elemento visibile in una casella di riepilogo, in caso contrario. LB_ERR
Osservazioni:
Inizialmente, l'elemento 0 si trova nella parte superiore della casella di riepilogo, ma se la casella di riepilogo viene scorrere, un altro elemento potrebbe trovarsi nella parte superiore.
Esempio
// Want an item in the bottom half to be the first visible item.
int n = m_myListBox.GetCount() / 2;
if (m_myListBox.GetTopIndex() < n)
{
m_myListBox.SetTopIndex(n);
ASSERT(m_myListBox.GetTopIndex() == n);
}
CListBox::InitStorage
Alloca memoria per l'archiviazione di elementi della casella di riepilogo.
int InitStorage(
int nItems,
UINT nBytes);
Parametri
nItems
Specifica il numero di elementi da aggiungere.
nBytes
Specifica la quantità di memoria, espressa in byte, da allocare per le stringhe di elemento.
Valore restituito
In caso di esito positivo, il numero massimo di elementi che la casella di riepilogo può archiviare prima che sia necessaria una riallocazione della memoria, in caso contrario LB_ERRSPACE
, significa che non è disponibile memoria sufficiente.
Osservazioni:
Chiamare questa funzione prima di aggiungere un numero elevato di elementi a un oggetto CListBox
.
Questa funzione consente di velocizzare l'inizializzazione delle caselle di riepilogo con un numero elevato di elementi (più di 100). Prealloca la quantità di memoria specificata in modo che le funzioni successive AddString
, InsertString
e Dir
richiedono il tempo più breve possibile. È possibile usare stime per i parametri. Se si sovrastima, viene allocata una quantità di memoria aggiuntiva; se si sottovaluta, l'allocazione normale viene usata per gli elementi che superano l'importo preallocato.
Solo Windows 95/98: il nItems
parametro è limitato a valori a 16 bit. Ciò significa che le caselle di riepilogo non possono contenere più di 32.767 elementi. Anche se il numero di elementi è limitato, la dimensione totale degli elementi in una casella di riepilogo è limitata solo dalla memoria disponibile.
Esempio
// Initialize the storage of the list box to be 256 strings with
// about 10 characters per string, performance improvement.
int n = m_myListBox.InitStorage(256, 16 * sizeof(TCHAR));
ASSERT(n != LB_ERRSPACE);
// Add 256 items to the list box.
CString str;
for (int i = 0; i < 256; i++)
{
str.Format(_T("item string %d"), i);
m_myListBox.AddString(str);
}
CListBox::InsertString
Inserisce una stringa nella casella di riepilogo.
int InsertString(
int nIndex,
LPCTSTR lpszItem);
Parametri
nIndex
Specifica l'indice in base zero della posizione in cui inserire la stringa. Se questo parametro è -1, la stringa viene aggiunta alla fine dell'elenco.
lpszItem
Punta a una stringa con terminazione null da inserire.
Valore restituito
Indice in base zero della posizione in cui è stata inserita la stringa. Il valore restituito è LB_ERR
se si verifica un errore. Il valore restituito è LB_ERRSPACE
se è disponibile spazio insufficiente per archiviare la nuova stringa.
Osservazioni:
A differenza della AddString
funzione membro, InsertString
non determina l'ordinamento di un elenco con lo LBS_SORT
stile.
Esempio
// Insert items in between existing items.
CString str;
int n = m_myListBox.GetCount();
for (int i = 0; i < n; i++)
{
str.Format(_T("item string %c"), (char)('A' + i));
m_myListBox.InsertString(2 * i, str);
}
CListBox::ItemFromPoint
Determina l'elemento della casella di riepilogo più vicino al punto specificato in pt
.
UINT ItemFromPoint(
CPoint pt,
BOOL& bOutside) const;
Parametri
pt
Punto per il quale trovare l'elemento più vicino, specificato rispetto all'angolo superiore sinistro dell'area client della casella di riepilogo.
bOutside
Riferimento a una BOOL
variabile che verrà impostata su TRUE
se pt
si trova all'esterno dell'area client della casella di riepilogo, FALSE
se pt
si trova all'interno dell'area client della casella di riepilogo.
Valore restituito
Indice dell'elemento più vicino al punto specificato in pt
.
Osservazioni:
È possibile usare questa funzione per determinare l'elemento della casella di riepilogo su cui si sposta il cursore del mouse.
Esempio
Vedere l'esempio per CListBox::SetAnchorIndex
.
CListBox::MeasureItem
Chiamato dal framework quando viene creata una casella di riepilogo con uno stile di disegno proprietario.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parametri
lpMeasureItemStruct
Puntatore lungo a una MEASUREITEMSTRUCT
struttura.
Osservazioni:
Per impostazione predefinita, questa funzione membro non esegue alcuna operazione. Eseguire l'override di questa funzione membro e compilare la MEASUREITEMSTRUCT
struttura per informare Windows delle dimensioni della casella di riepilogo. Se la casella di riepilogo viene creata con lo LBS_OWNERDRAWVARIABLE
stile , il framework chiama questa funzione membro per ogni elemento nella casella di riepilogo. In caso contrario, questo membro viene chiamato una sola volta.
Per altre informazioni sull'uso dello LBS_OWNERDRAWFIXED
stile in una casella di riepilogo di disegno proprietario creata con la SubclassDlgItem
funzione membro di CWnd
, vedere la discussione nella Nota tecnica 14.
Vedere CWnd::OnMeasureItem
per una descrizione della MEASUREITEMSTRUCT
struttura.
Esempio
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
ASSERT(lpMeasureItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC *pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}
CListBox::ResetContent
Rimuove tutti gli elementi da una casella di riepilogo.
void ResetContent();
Esempio
// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);
CListBox::SelectString
Cerca un elemento della casella di riepilogo corrispondente alla stringa specificata e, se viene trovato un elemento corrispondente, seleziona l'elemento.
int SelectString(
int nStartAfter,
LPCTSTR lpszItem);
Parametri
nStartAfter
Contiene l'indice in base zero dell'elemento prima della ricerca del primo elemento. Quando la ricerca raggiunge la parte inferiore della casella di riepilogo, continua dalla parte superiore della casella di riepilogo all'elemento specificato da nStartAfter
. Se nStartAfter
è -1, viene eseguita la ricerca dell'intera casella di riepilogo dall'inizio.
lpszItem
Punta alla stringa con terminazione Null contenente il prefisso da cercare. La ricerca è indipendente dal caso, quindi questa stringa può contenere qualsiasi combinazione di lettere maiuscole e minuscole.
Valore restituito
Indice dell'elemento selezionato se la ricerca ha avuto esito positivo. Se la ricerca non è riuscita, il valore restituito è LB_ERR
e la selezione corrente non viene modificata.
Osservazioni:
Se necessario, la casella di riepilogo viene visualizzata per visualizzare l'elemento selezionato.
Questa funzione membro non può essere utilizzata con una casella di riepilogo con lo LBS_MULTIPLESEL
stile .
Un elemento viene selezionato solo se i caratteri iniziali (dal punto iniziale) corrispondono ai caratteri nella stringa specificata da lpszItem
.
Usare la FindString
funzione membro per trovare una stringa senza selezionare l'elemento.
Esempio
// The string to match.
LPCTSTR lpszmyString = _T("item 5");
// Select the item that begins with the specified string.
int nIndex = m_myListBox.SelectString(0, lpszmyString);
ASSERT(nIndex != LB_ERR);
CListBox::SelItemRange
Seleziona più elementi consecutivi in una casella di riepilogo a selezione multipla.
int SelItemRange(
BOOL bSelect,
int nFirstItem,
int nLastItem);
Parametri
bSelect
Specifica come impostare la selezione. Se bSelect
è TRUE
, la stringa è selezionata ed evidenziata; se FALSE
, l'evidenziazione viene rimossa e la stringa non è più selezionata.
nFirstItem
Specifica l'indice in base zero del primo elemento da impostare.
nLastItem
Specifica l'indice in base zero dell'ultimo elemento da impostare.
Valore restituito
LB_ERR
se si verifica un errore.
Osservazioni:
Utilizzare questa funzione membro solo con caselle di riepilogo a selezione multipla. Se è necessario selezionare un solo elemento in una casella di riepilogo a selezione multipla, ovvero se nFirstItem
è uguale a nLastItem
, chiamare invece la SetSel
funzione membro.
Esempio
// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);
CListBox::SetAnchorIndex
Imposta l'ancoraggio in una casella di riepilogo a selezione multipla per iniziare una selezione estesa.
void SetAnchorIndex(int nIndex);
Parametri
nIndex
Specifica l'indice in base zero dell'elemento della casella di riepilogo che sarà l'ancoraggio.
Osservazioni:
In una casella di riepilogo a selezione multipla, l'elemento di ancoraggio è il primo o l'ultimo elemento in un blocco di elementi selezionati contigui.
Esempio
void CMyODListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
BOOL bOutside = TRUE;
UINT uItem = ItemFromPoint(point, bOutside);
if (!bOutside)
{
// Set the anchor to be the middle item.
SetAnchorIndex(uItem);
ASSERT((UINT)GetAnchorIndex() == uItem);
}
CListBox::OnLButtonDown(nFlags, point);
}
CListBox::SetCaretIndex
Imposta il rettangolo di attivazione sull'elemento in corrispondenza dell'indice specificato in una casella di riepilogo a selezione multipla.
int SetCaretIndex(
int nIndex,
BOOL bScroll = TRUE);
Parametri
nIndex
Specifica l'indice in base zero dell'elemento per ricevere il rettangolo dello stato attivo nella casella di riepilogo.
bScroll
Se questo valore è 0, l'elemento viene scorrevole fino a quando non è completamente visibile. Se questo valore non è 0, l'elemento viene scorrevole fino a quando non è almeno parzialmente visibile.
Valore restituito
LB_ERR
se si verifica un errore.
Osservazioni:
Se l'elemento non è visibile, viene eseguito lo scorrimento nella visualizzazione.
Esempio
// Set the caret to be the middle item.
m_myListBox.SetCaretIndex(m_myListBox.GetCount() / 2);
ASSERT(m_myListBox.GetCaretIndex() == m_myListBox.GetCount() / 2);
CListBox::SetColumnWidth
Imposta la larghezza in pixel di tutte le colonne in una casella di riepilogo a più colonne (creata con lo LBS_MULTICOLUMN
stile).
void SetColumnWidth(int cxWidth);
Parametri
cxWidth
Specifica la larghezza in pixel di tutte le colonne.
Esempio
// Find the pixel width of the largest item.
CString str;
CSize sz;
int dx = 0;
CDC* pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
myListBox.ReleaseDC(pDC);
// Set the column width of the first column to be one and 1/3 units
// of the largest string.
myListBox.SetColumnWidth(dx * 4 / 3);
CListBox::SetCurSel
Seleziona una stringa e la scorre nella visualizzazione, se necessario.
int SetCurSel(int nSelect);
Parametri
nSelect
Specifica l'indice in base zero della stringa da selezionare. Se nSelect
è -1, la casella di riepilogo è impostata per non avere alcuna selezione.
Valore restituito
LB_ERR
se si verifica un errore.
Osservazioni:
Quando viene selezionata la nuova stringa, la casella di riepilogo rimuove l'evidenziazione dalla stringa selezionata in precedenza.
Utilizzare questa funzione membro solo con caselle di riepilogo a selezione singola.
Per impostare o rimuovere una selezione in una casella di riepilogo a selezione multipla, usare CListBox::SetSel
.
Esempio
// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
m_myListBox.SetCurSel(nCount - 1);
CListBox::SetHorizontalExtent
Imposta la larghezza, espressa in pixel, in base alla quale è possibile scorrere orizzontalmente una casella di riepilogo.
void SetHorizontalExtent(int cxExtent);
Parametri
cxExtent
Specifica il numero di pixel in base al quale è possibile scorrere orizzontalmente la casella di riepilogo.
Osservazioni:
Se le dimensioni della casella di riepilogo sono inferiori a questo valore, la barra di scorrimento orizzontale scorrerà orizzontalmente gli elementi nella casella di riepilogo. Se la casella di riepilogo è grande o maggiore di questo valore, la barra di scorrimento orizzontale è nascosta.
Per rispondere a una chiamata a SetHorizontalExtent
, la casella di riepilogo deve essere stata definita con lo WS_HSCROLL
stile .
Questa funzione membro non è utile per le caselle di riepilogo a più colonne. Per le caselle di riepilogo multicolonna, chiamare la SetColumnWidth
funzione membro.
Esempio
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_myListBox.GetDC();
CFont *pFont = m_myListBox.GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_myListBox.ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings
// can be scrolled to.
m_myListBox.SetHorizontalExtent(dx);
CListBox::SetItemData
Imposta un valore associato all'elemento specificato in una casella di riepilogo.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Parametri
nIndex
Specifica l'indice in base zero dell'elemento.
dwItemData
Specifica il valore da associare all'elemento.
Valore restituito
LB_ERR
se si verifica un errore.
Esempio
// Set the data of each item to be equal to its index.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.SetItemData(i, i);
}
CListBox::SetItemDataPtr
Imposta il valore a 32 bit associato all'elemento specificato in una casella di riepilogo in modo che sia il puntatore specificato ( void
*).
int SetItemDataPtr(
int nIndex,
void* pData);
Parametri
nIndex
Specifica l'indice in base zero dell'elemento.
pData
Specifica il puntatore da associare all'elemento.
Valore restituito
LB_ERR
se si verifica un errore.
Osservazioni:
Questo puntatore rimane valido per la durata della casella di riepilogo, anche se la posizione relativa dell'elemento all'interno della casella di riepilogo potrebbe cambiare man mano che gli elementi vengono aggiunti o rimossi. Di conseguenza, l'indice dell'elemento all'interno della casella può cambiare, ma il puntatore rimane affidabile.
Esempio
// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.SetItemDataPtr(i, NULL);
}
CListBox::SetItemHeight
Imposta l'altezza degli elementi in una casella di riepilogo.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Parametri
nIndex
Specifica l'indice in base zero dell'elemento nella casella di riepilogo. Questo parametro viene utilizzato solo se la casella di riepilogo ha lo LBS_OWNERDRAWVARIABLE
stile; in caso contrario, deve essere impostata su 0.
cyItemHeight
Specifica l'altezza, in pixel, dell'elemento.
Valore restituito
LB_ERR
se l'indice o l'altezza non è valida.
Osservazioni:
Se la casella di riepilogo ha lo LBS_OWNERDRAWVARIABLE
stile , questa funzione imposta l'altezza dell'elemento specificato da nIndex
. In caso contrario, questa funzione imposta l'altezza di tutti gli elementi nella casella di riepilogo.
Esempio
// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
myListBox.SetItemHeight(i, sz.cy);
}
myListBox.ReleaseDC(pDC);
CListBox::SetLocale
Imposta l'identificatore delle impostazioni locali per questa casella di riepilogo.
LCID SetLocale(LCID nNewLocale);
Parametri
nNewLocale
Nuovo valore dell'identificatore delle impostazioni locali (LCID) da impostare per la casella di riepilogo.
Valore restituito
Valore LCID (Locale Identifier) precedente per questa casella di riepilogo.
Osservazioni:
Se SetLocale
non viene chiamato, le impostazioni locali predefinite vengono ottenute dal sistema. Le impostazioni locali predefinite del sistema possono essere modificate usando l'applicazione regionale (o internazionale) di Pannello di controllo.
Esempio
// My LCID to use.
LCID mylcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN),
SORT_DEFAULT);
// Force the list box to use my locale.
m_myListBox.SetLocale(mylcid);
ASSERT(m_myListBox.GetLocale() == mylcid);
CListBox::SetSel
Seleziona una stringa in una casella di riepilogo a selezione multipla.
int SetSel(
int nIndex,
BOOL bSelect = TRUE);
Parametri
nIndex
Contiene l'indice in base zero della stringa da impostare. Se -1, la selezione viene aggiunta o rimossa da tutte le stringhe, a seconda del valore di bSelect
.
bSelect
Specifica come impostare la selezione. Se bSelect
è TRUE
, la stringa è selezionata ed evidenziata; se FALSE
, l'evidenziazione viene rimossa e la stringa non è più selezionata. La stringa specificata è selezionata ed evidenziata per impostazione predefinita.
Valore restituito
LB_ERR
se si verifica un errore.
Osservazioni:
Utilizzare questa funzione membro solo con caselle di riepilogo a selezione multipla.
Per selezionare un elemento da una casella di riepilogo a selezione singola, usare CListBox::SetCurSel
.
Esempio
// Select all of the items with an even index and
// deselect all others.
for (int i = 0; i < m_myODListBox.GetCount(); i++)
{
m_myODListBox.SetSel(i, ((i % 2) == 0));
}
CListBox::SetTabStops
Imposta le posizioni di tabulazione in una casella di riepilogo.
void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);
BOOL SetTabStops(
int nTabStops,
LPINT rgTabStops);
Parametri
cxEachStop
Le tabulazioni vengono impostate in ogni cxEachStop
unità di dialogo. Vedere rgTabStops
per una descrizione di un'unità di dialogo.
nTabStops
Specifica il numero di tabulazioni da includere nella casella di riepilogo.
rgTabStops
Punta al primo membro di una matrice di numeri interi contenenti le posizioni di tabulazione nelle unità di dialogo. Un'unità di dialogo è una distanza orizzontale o verticale. Un'unità di dialogo orizzontale è uguale a un quarto dell'unità di larghezza di base del dialogo corrente e un'unità di dialogo verticale è uguale a un ottavo dell'unità di altezza di base del dialogo corrente. Le unità di base del dialogo vengono calcolate in base all'altezza e alla larghezza del tipo di carattere di sistema corrente. La GetDialogBaseUnits
funzione Windows restituisce le unità di base correnti del dialogo in pixel. Le tabulazioni devono essere ordinate in ordine crescente; le schede indietro non sono consentite.
Valore restituito
Diverso da zero se sono state impostate tutte le schede; in caso contrario, 0.
Osservazioni:
Per impostare tabulazioni sulle dimensioni predefinite di 2 unità di dialogo, chiamare la versione senza parametri di questa funzione membro. Per impostare tabulazioni su una dimensione diversa da 2, chiamare la versione con l'argomento cxEachStop
.
Per impostare tabulazioni su una matrice di dimensioni, usare la versione con gli rgTabStops
argomenti e nTabStops
. Verrà impostata una tabulazione per ogni valore in rgTabStops
, fino al numero specificato da nTabStops
.
Per rispondere a una chiamata alla SetTabStops
funzione membro, la casella di riepilogo deve essere stata creata con lo LBS_USETABSTOPS
stile .
Esempio
// Find the pixel width of the largest first substring.
CString str;
CSize sz;
int nIndex, dx = 0;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
if ((nIndex = str.Find('\t')) != -1)
str = str.Right(nIndex);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
myListBox.ReleaseDC(pDC);
// Set tab stops at every one and 1/3 units
// of the largest string.
// NOTE: Convert pixels to dialog units.
myListBox.SetTabStops((dx * 4 / 3 * 4) / LOWORD(::GetDialogBaseUnits()));
CListBox::SetTopIndex
Assicura che un particolare elemento della casella di riepilogo sia visibile.
int SetTopIndex(int nIndex);
Parametri
nIndex
Specifica l'indice in base zero dell'elemento della casella di riepilogo.
Valore restituito
Zero se ha esito positivo o LB_ERR
se si verifica un errore.
Osservazioni:
Il sistema scorre la casella di riepilogo fino a quando l'elemento specificato da nIndex
viene visualizzato nella parte superiore della casella di riepilogo o fino a raggiungere l'intervallo di scorrimento massimo.
Esempio
// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);
CListBox::VKeyToItem
Chiamato dal framework quando la finestra padre della casella di riepilogo riceve un WM_VKEYTOITEM
messaggio dalla casella di riepilogo.
virtual int VKeyToItem(
UINT nKey,
UINT nIndex);
Parametri
nKey
Codice del tasto virtuale premuto dall'utente. Per un elenco dei codici di chiave virtuale standard, vedere Winuser.h
nIndex
Posizione corrente del cursore casella di riepilogo.
Valore restituito
Restituisce - 2 per nessun'altra azione, - 1 per l'azione predefinita o un numero non negativo per specificare un indice di una voce di casella di riepilogo in cui eseguire l'azione predefinita per la sequenza di tasti.
Osservazioni:
Il WM_VKEYTOITEM
messaggio viene inviato dalla casella di riepilogo quando riceve un WM_KEYDOWN
messaggio, ma solo se la casella di riepilogo soddisfa entrambe le opzioni seguenti:
Ha il set di
LBS_WANTKEYBOARDINPUT
stili.Contiene almeno un elemento.
Non chiamare mai questa funzione manualmente. Eseguire l'override di questa funzione per fornire una gestione personalizzata dei messaggi da tastiera.
È necessario restituire un valore per indicare al framework l'azione eseguita dall'override. Un valore restituito : 2 indica che l'applicazione ha gestito tutti gli aspetti della selezione dell'elemento e non richiede ulteriori azioni dalla casella di riepilogo. Prima di tornare - 2, è possibile impostare la selezione o spostare il cursore o entrambi. Per impostare la selezione, usare SetCurSel
o SetSel
. Per spostare il cursore, usare SetCaretIndex
.
Il valore restituito - 1 indica che la casella di riepilogo deve eseguire l'azione predefinita in risposta alla sequenza di tasti. L'implementazione predefinita restituisce - 1.
Il valore restituito 0 o maggiore specifica l'indice di un elemento nella casella di riepilogo e indica che la casella di riepilogo deve eseguire l'azione predefinita per la sequenza di tasti sull'elemento specificato.
Esempio
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on the down key and up one item
// on the up key. The list box control was created with the following
// code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::VKeyToItem(UINT nKey, UINT nIndex)
{
// On key up, move the caret up one item.
if ((nKey == VK_UP) && (nIndex > 0))
{
SetCaretIndex(nIndex - 1);
}
// On key down, move the caret down one item.
else if ((nKey == VK_DOWN) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex + 1);
}
// Do not perform any default processing.
return -2;
}
Vedi anche
Esempio MFC CTRLTEST
CWnd
Classe
Grafico della gerarchia
CWnd
Classe
CButton
Classe
CComboBox
Classe
CEdit
Classe
CScrollBar
Classe
CStatic
Classe