Condividi tramite


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 lo LBS_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 lo LBS_NOTIFY stile.

  • ON_LBN_SELCHANGE La selezione nella casella di riepilogo è stata modificata. Questa notifica non viene inviata se la selezione viene modificata dalla CListBox::SetCurSel funzione membro. Questa notifica si applica solo a una casella di riepilogo con lo LBS_NOTIFY stile . Il LBN_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 un WM_CHAR messaggio.

  • ON_WM_VKEYTOITEM Una casella di riepilogo con lo LBS_WANTKEYBOARDINPUT stile riceve un WM_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à

CObject

CCmdTarget

CWnd

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_NCCREATEmessaggi , WM_CREATE, WM_NCCALCSIZEe WM_GETMINMAXINFO al controllo casella di riepilogo.

Questi messaggi vengono gestiti per impostazione predefinita dalle OnNcCreatefunzioni membro , OnCreateOnNcCalcSize, 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 Sempre

  • WS_VISIBLE Solitamente

  • WS_DISABLED Raramente

  • WS_VSCROLL Per aggiungere una barra di scorrimento verticale

  • WS_HSCROLL Per aggiungere una barra di scorrimento orizzontale

  • WS_GROUP Per raggruppare i controlli

  • WS_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::GetStatuso 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, InsertStringe 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:

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