Condividi tramite


Classe CComboBox

Fornisce la funzionalità di una casella combinata di Windows.

Sintassi

class CComboBox : public CWnd

Membri

Costruttori pubblici

Nome Descrizione
CComboBox::CComboBox Costruisce un oggetto CComboBox.

Metodi pubblici

Nome Descrizione
CComboBox::AddString Aggiunge una stringa alla fine dell'elenco nella casella di riepilogo di una casella combinata o nella posizione ordinata per le caselle di riepilogo con lo CBS_SORT stile .
CComboBox::Clear Elimina (cancella) la selezione corrente, se presente, nel controllo di modifica.
CComboBox::CompareItem Chiamato dal framework per determinare la posizione relativa di un nuovo elemento di elenco in una casella combinata ordinata disegnata dal proprietario.
CComboBox::Copy Copia la selezione corrente, se presente, negli Appunti in CF_TEXT formato .
CComboBox::Create Crea la casella combinata e la associa all'oggetto CComboBox .
CComboBox::Cut Elimina (taglia) la selezione corrente, se presente, nel controllo di modifica e copia il testo eliminato negli Appunti in CF_TEXT formato .
CComboBox::DeleteItem Chiamato dal framework quando un elemento di elenco viene eliminato da una casella combinata disegnata dal proprietario.
CComboBox::DeleteString Elimina una stringa dalla casella di riepilogo di una casella combinata.
CComboBox::Dir Aggiunge un elenco di nomi di file alla casella di riepilogo di una casella combinata.
CComboBox::DrawItem Chiamato dal framework quando cambia un aspetto visivo di una casella combinata disegnata dal proprietario.
CComboBox::FindString Trova la prima stringa contenente il prefisso specificato nella casella di riepilogo di una casella combinata.
CComboBox::FindStringExact Trova la prima stringa della casella di riepilogo (in una casella combinata) corrispondente alla stringa specificata.
CComboBox::GetComboBoxInfo Recupera informazioni sull'oggetto CComboBox .
CComboBox::GetCount Recupera il numero di elementi nella casella di riepilogo di una casella combinata.
CComboBox::GetCueBanner Ottiene il testo del segnale visualizzato per un controllo casella combinata.
CComboBox::GetCurSel Recupera l'indice dell'elemento attualmente selezionato, se presente, nella casella di riepilogo di una casella combinata.
CComboBox::GetDroppedControlRect Recupera le coordinate dello schermo della casella di riepilogo visibile (eliminata) di una casella combinata a discesa.
CComboBox::GetDroppedState Determina se la casella di riepilogo di una casella combinata a discesa è visibile (eliminata).
CComboBox::GetDroppedWidth Recupera la larghezza minima consentita per la parte casella di riepilogo a discesa di una casella combinata.
CComboBox::GetEditSel Ottiene le posizioni del carattere iniziale e finale della selezione corrente nel controllo di modifica di una casella combinata.
CComboBox::GetExtendedUI Determina se una casella combinata ha l'interfaccia utente predefinita o l'interfaccia utente estesa.
CComboBox::GetHorizontalExtent Restituisce la larghezza in pixel in cui è possibile scorrere orizzontalmente la parte casella di riepilogo della casella combinata.
CComboBox::GetItemData Recupera il valore a 32 bit fornito dall'applicazione associato all'elemento casella combinata specificata.
CComboBox::GetItemDataPtr Recupera il puntatore a 32 bit fornito dall'applicazione associato all'elemento casella combinata specificata.
CComboBox::GetItemHeight Recupera l'altezza delle voci di elenco in una casella combinata.
CComboBox::GetLBText Ottiene una stringa dalla casella di riepilogo di una casella combinata.
CComboBox::GetLBTextLen Ottiene la lunghezza di una stringa nella casella di riepilogo di una casella combinata.
CComboBox::GetLocale Recupera l'identificatore delle impostazioni locali per una casella combinata.
CComboBox::GetMinVisible Ottiene il numero minimo di elementi visibili nell'elenco a discesa della casella combinata corrente.
CComboBox::GetTopIndex Restituisce l'indice del primo elemento visibile nella parte casella di riepilogo della casella combinata.
CComboBox::InitStorage Prealloca blocchi di memoria per elementi e stringhe nella parte casella di riepilogo della casella combinata.
CComboBox::InsertString Inserisce una stringa nella casella di riepilogo di una casella combinata.
CComboBox::LimitText Limita la lunghezza del testo che l'utente può immettere nel controllo di modifica di una casella combinata.
CComboBox::MeasureItem Chiamato dal framework per determinare le dimensioni della casella combinata quando viene creata una casella combinata disegnata dal proprietario.
CComboBox::Paste Inserisce i dati dagli Appunti nel controllo di modifica in corrispondenza della posizione corrente del cursore. I dati vengono inseriti solo se gli Appunti contengono dati in CF_TEXT formato .
CComboBox::ResetContent Rimuove tutti gli elementi dalla casella di riepilogo e il controllo di modifica di una casella combinata.
CComboBox::SelectString Cerca una stringa nella casella di riepilogo di una casella combinata e, se la stringa viene trovata, seleziona la stringa nella casella di riepilogo e copia la stringa nel controllo di modifica.
CComboBox::SetCueBanner Imposta il testo del segnale visualizzato per un controllo casella combinata.
CComboBox::SetCurSel Seleziona una stringa nella casella di riepilogo di una casella combinata.
CComboBox::SetDroppedWidth Imposta la larghezza minima consentita per la parte casella di riepilogo a discesa di una casella combinata.
CComboBox::SetEditSel Seleziona i caratteri nel controllo di modifica di una casella combinata.
CComboBox::SetExtendedUI Seleziona l'interfaccia utente predefinita o l'interfaccia utente estesa per una casella combinata con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST .
CComboBox::SetHorizontalExtent Imposta la larghezza in pixel in cui è possibile scorrere orizzontalmente la parte casella di riepilogo della casella combinata.
CComboBox::SetItemData Imposta il valore a 32 bit associato all'elemento specificato in una casella combinata.
CComboBox::SetItemDataPtr Imposta il puntatore a 32 bit associato all'elemento specificato in una casella combinata.
CComboBox::SetItemHeight Imposta l'altezza degli elementi dell'elenco in una casella combinata o l'altezza della parte di controllo di modifica (o testo statico) di una casella combinata.
CComboBox::SetLocale Imposta l'identificatore delle impostazioni locali per una casella combinata.
CComboBox::SetMinVisibleItems Imposta il numero minimo di elementi visibili nell'elenco a discesa della casella combinata corrente.
CComboBox::SetTopIndex Indica alla parte casella di riepilogo della casella combinata di visualizzare l'elemento con l'indice specificato nella parte superiore.
CComboBox::ShowDropDown Visualizza o nasconde la casella di riepilogo di una casella combinata con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST .

Osservazioni:

Una casella combinata è costituita da una casella di riepilogo combinata con un controllo statico o un controllo di modifica. La parte casella di riepilogo del controllo può essere visualizzata in qualsiasi momento o può essere visualizzata solo quando l'utente seleziona la freccia a discesa accanto al controllo.

L'elemento attualmente selezionato (se presente) nella casella di riepilogo viene visualizzato nel controllo statico o di modifica. Inoltre, se la casella combinata ha lo stile elenco a discesa, l'utente può digitare il carattere iniziale di uno degli elementi nell'elenco e la casella di riepilogo, se visibile, evidenzia l'elemento successivo con tale carattere iniziale.

Nella tabella seguente vengono confrontati i tre stili casella combinata.

Style Quando è visibile la casella di riepilogo Controllo statico o di modifica
Semplice Sempre Modifica
Elenco a discesa Quando viene eliminato Modifica
Drop-down list Quando viene eliminato Statico

È possibile creare un CComboBox oggetto da un modello di finestra di dialogo o direttamente nel codice. In entrambi i casi chiamare prima il costruttore CComboBox per costruire l'oggetto CComboBox , quindi chiamare la Create funzione membro per creare il controllo e collegarlo all'oggetto CComboBox .

Se si desidera gestire i messaggi di notifica di Windows inviati da una casella combinata al relativo elemento 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 casella combinata 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( );

Non è possibile prevedere l'ordine in cui verranno inviate determinate notifiche. In particolare, una CBN_SELCHANGE notifica può verificarsi prima o dopo una CBN_CLOSEUP notifica.

Le potenziali voci della mappa messaggi sono le seguenti:

  • ON_CBN_CLOSEUP (Windows 3.1 e versioni successive). La casella di riepilogo di una casella combinata è stata chiusa. Questo messaggio di notifica non viene inviato per una casella combinata con lo CBS_SIMPLE stile .

  • ON_CBN_DBLCLK L'utente fa doppio clic su una stringa nella casella di riepilogo di una casella combinata. Questo messaggio di notifica viene inviato solo per una casella combinata con lo CBS_SIMPLE stile . Per una casella combinata con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST , un doppio clic non può verificarsi perché un singolo clic nasconde la casella di riepilogo.

  • ON_CBN_DROPDOWN La casella di riepilogo di una casella combinata sta per essere resa visibile. Questo messaggio di notifica può verificarsi solo per una casella combinata con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST .

  • ON_CBN_EDITCHANGE L'utente ha eseguito un'azione che potrebbe aver modificato il testo nella parte di controllo di modifica di una casella combinata. A differenza del CBN_EDITUPDATE messaggio, questo messaggio viene inviato dopo che Windows aggiorna la schermata. Non viene inviato se la casella combinata ha lo CBS_DROPDOWNLIST stile.

  • ON_CBN_EDITUPDATE La parte di controllo di modifica di una casella combinata sta per visualizzare il testo modificato. Questo messaggio di notifica viene inviato dopo che il controllo ha formattato il testo, ma prima di visualizzare il testo. Non viene inviato se la casella combinata ha lo CBS_DROPDOWNLIST stile.

  • ON_CBN_ERRSPACE La casella combinata non può allocare memoria sufficiente per soddisfare una richiesta specifica.

  • ON_CBN_SELENDCANCEL (Windows 3.1 e versioni successive). Indica che la selezione dell'utente deve essere annullata. L'utente fa clic su un elemento e quindi fa clic su un'altra finestra o controllo per nascondere la casella di riepilogo di una casella combinata. Questo messaggio di notifica viene inviato prima del CBN_CLOSEUP messaggio di notifica per indicare che la selezione dell'utente deve essere ignorata. Il CBN_SELENDCANCEL messaggio di notifica o CBN_SELENDOK viene inviato anche se il CBN_CLOSEUP messaggio di notifica non viene inviato (come nel caso di una casella combinata con lo CBS_SIMPLE stile).

  • ON_CBN_SELENDOK L'utente seleziona un elemento e quindi preme INVIO oppure fa clic sul tasto FRECCIA GIÙ per nascondere la casella di riepilogo di una casella combinata. Questo messaggio di notifica viene inviato prima del CBN_CLOSEUP messaggio per indicare che la selezione dell'utente deve essere considerata valida. Il CBN_SELENDCANCEL messaggio di notifica o CBN_SELENDOK viene inviato anche se il CBN_CLOSEUP messaggio di notifica non viene inviato (come nel caso di una casella combinata con lo CBS_SIMPLE stile).

  • ON_CBN_KILLFOCUS La casella combinata sta perdendo lo stato attivo per l'input.

  • ON_CBN_SELCHANGE La selezione nella casella di riepilogo di una casella combinata sta per essere modificata in seguito a un clic dell'utente nella casella di riepilogo o alla modifica della selezione utilizzando i tasti di direzione. Durante l'elaborazione di questo messaggio, il testo nel controllo di modifica della casella combinata può essere recuperato solo tramite GetLBText o un'altra funzione simile. GetWindowText non può essere utilizzato.

  • ON_CBN_SETFOCUS La casella combinata riceve lo stato attivo per l'input.

Se si crea un CComboBox oggetto all'interno di una finestra di dialogo (tramite una risorsa di dialogo), l'oggetto CComboBox viene eliminato automaticamente quando l'utente chiude la finestra di dialogo.

Se si incorpora un oggetto all'interno di CComboBox un altro oggetto finestra, non è necessario eliminarlo. Se si crea l'oggetto CComboBox nello stack, viene eliminato automaticamente. Se si crea l'oggetto nell'heap CComboBox usando la new funzione , è necessario chiamare delete sull'oggetto per distruggerlo quando la casella combinata di Windows viene eliminata definitivamente.

Nota Se si desidera gestire WM_KEYDOWN e WM_CHAR messaggi, è necessario sottoclassare i controlli casella di riepilogo e modifica della casella combinata, derivare classi da CEdit e CListBoxe aggiungere gestori per tali messaggi alle classi derivate. Per ulteriori informazioni, vedere CWnd::SubclassWindow.

Gerarchia di ereditarietà

CObject

CCmdTarget

CWnd

CComboBox

Requisiti

Intestazione: afxwin.h

CComboBox::AddString

Aggiunge una stringa alla casella di riepilogo di una casella combinata.

int AddString(LPCTSTR lpszString);

Parametri

lpszString
Punta alla stringa con terminazione Null da aggiungere.

Valore restituito

Se il valore restituito è maggiore o uguale a 0, è l'indice in base zero alla stringa nella casella di riepilogo. Il valore restituito è CB_ERR se si verifica un errore. Il valore restituito è CB_ERRSPACE se è disponibile spazio insufficiente per archiviare la nuova stringa.

Osservazioni:

Se la casella di riepilogo non è stata creata con lo CBS_SORT stile, la stringa viene aggiunta alla fine dell'elenco. In caso contrario, la stringa viene inserita nell'elenco e l'elenco viene ordinato.

Nota

Questa funzione non è supportata dal controllo Windows ComboBoxEx . Per altre informazioni su questo controllo, vedere ComboBoxEx Controlli in Windows SDK.

Per inserire una stringa in una posizione specifica all'interno dell'elenco, usare la InsertString funzione membro.

Esempio

// Add 20 items to the combo box.
CString str;
for (int i = 0; i < 20; i++)
{
   str.Format(_T("item string %d"), i);
   m_pComboBox->AddString(str);
}

CComboBox::CComboBox

Costruisce un oggetto CComboBox.

CComboBox();

Esempio

// Declare a local CComboBox object.
CComboBox myComboBox;

// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;

CComboBox::Clear

Elimina (cancella) la selezione corrente, se presente, nel controllo di modifica della casella combinata.

void Clear();

Osservazioni:

Per eliminare la selezione corrente e posizionare il contenuto eliminato negli Appunti, utilizzare la Cut funzione membro.

Esempio

// Delete all of the text from the combo box's edit control.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Clear();

CComboBox::CompareItem

Chiamato dal framework per determinare la posizione relativa di un nuovo elemento nella parte casella di riepilogo di una casella combinata 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ò essere 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 di COMPAREITEMSTRUCT.

Osservazioni:

Per impostazione predefinita, questa funzione membro non esegue alcuna operazione. Se si crea una casella combinata 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

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example compares two items using strcmp to sort items in reverse
// alphabetical order. The combo box control was created with the
// following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
int CMyComboBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
   int iComp = 0;
   ASSERT(lpCompareItemStruct->CtlType == ODT_COMBOBOX);
   LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
   ASSERT(lpszText1 != NULL);
   LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
   ASSERT(lpszText2 != NULL);

   if (NULL != lpszText1 && NULL != lpszText2)
   {
      iComp = _tcscmp(lpszText2, lpszText1);
   }

   return iComp;
}

CComboBox::Copy

Copia la selezione corrente, se presente, nel controllo di modifica della casella combinata negli Appunti in CF_TEXT formato .

void Copy();

Esempio

// Copy all of the text from the combo box's edit control
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Copy();

CComboBox::Create

Crea la casella combinata e la associa all'oggetto CComboBox .

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

Parametri

dwStyle
Specifica lo stile della casella combinata. Applicare qualsiasi combinazione di stili casella combinata alla casella.

rect
Punta alla posizione e alle dimensioni della casella combinata. Può essere una RECT struttura o un CRect oggetto .

pParentWnd
Specifica la finestra padre della casella combinata (in genere un ).CDialog Non deve essere NULL.

nID
Specifica l'ID di controllo della casella combinata.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Si costruisce un CComboBox oggetto in due passaggi. Chiamare innanzitutto il costruttore e quindi chiamare Create, che crea la casella combinata di Windows e la associa all'oggetto CComboBox .

Quando Create viene eseguito, Windows invia i WM_NCCREATEmessaggi , WM_CREATE, WM_NCCALCSIZEe WM_GETMINMAXINFO alla casella combinata.

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 CComboBox, 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 combinata. :

  • WS_CHILD Sempre

  • WS_VISIBLE Solitamente

  • WS_DISABLED Raramente

  • WS_VSCROLL Per aggiungere lo scorrimento verticale per la casella di riepilogo nella casella combinata

  • WS_HSCROLL Per aggiungere lo scorrimento orizzontale per la casella di riepilogo nella casella combinata

  • WS_GROUP Per raggruppare i controlli

  • WS_TABSTOP Per includere la casella combinata nell'ordine di tabulazione

Esempio

m_pComboBox->Create(
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
    CRect(10, 10, 200, 100), pParentWnd, 1);

CComboBox::Cut

Elimina (taglia) la selezione corrente, se presente, nel controllo di modifica casella combinata e copia il testo eliminato negli Appunti in CF_TEXT formato.

void Cut();

Osservazioni:

Per eliminare la selezione corrente senza inserire il testo eliminato negli Appunti, chiamare la Clear funzione membro.

Esempio

// Delete all of the text from the combo box's edit control and copy it
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Cut();

CComboBox::DeleteItem

Chiamato dal framework quando l'utente elimina un elemento da un oggetto di disegno CComboBox proprietario o elimina definitivamente la casella combinata.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Parametri

lpDeleteItemStruct
Puntatore lungo a una struttura di Windows DELETEITEMSTRUCT che contiene informazioni sull'elemento eliminato. Vedere CWnd::OnDeleteItem per una descrizione di questa struttura.

Osservazioni:

L'implementazione predefinita di questa funzione non esegue alcuna operazione. Eseguire l'override di questa funzione per ridisegnare la casella combinata in base alle esigenze.

Esempio

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example simply dumps the item's text. The combo box control was
// created with the following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyComboBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
   ASSERT(lpDeleteItemStruct->CtlType == ODT_COMBOBOX);
   LPTSTR lpszText = (LPTSTR)lpDeleteItemStruct->itemData;
   ASSERT(lpszText != NULL);

   AFXDUMP(lpszText);
}

CComboBox::DeleteString

Elimina l'elemento nella posizione nIndex dalla casella combinata.

int DeleteString(UINT nIndex);

Parametri

nIndex
Specifica l'indice della stringa da eliminare.

Valore restituito

Se il valore restituito è maggiore o uguale a 0, è un conteggio delle stringhe rimanenti nell'elenco. Il valore restituito è CB_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 combinata contiene due elementi, l'eliminazione del primo elemento causerà la presenza dell'elemento rimanente nella prima posizione. nIndex=0 per l'elemento nella prima posizione.

Esempio

// Delete every item from the combo box.
for (int i = m_pComboBox->GetCount() - 1; i >= 0; i--)
{
   m_pComboBox->DeleteString(i);
}

CComboBox::Dir

Aggiunge un elenco di nomi file o unità alla casella di riepilogo di una casella combinata.

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:

  • DDL_READWRITE Il file può essere letto o scritto in .

  • DDL_READONLY Il file può essere letto da ma non scritto in.

  • DDL_HIDDEN Il file è nascosto e non viene visualizzato in un elenco di directory.

  • DDL_SYSTEM Il file è un file di sistema.

  • DDL_DIRECTORY Il nome specificato da lpszWildCard specifica una directory.

  • DDL_ARCHIVE Il file è stato archiviato.

  • DDL_DRIVES Includere tutte le unità che corrispondono al nome specificato da lpszWildCard.

  • DDL_EXCLUSIVE 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

Se il valore restituito è maggiore o uguale a 0, è l'indice in base zero dell'ultimo nome file aggiunto all'elenco. Il valore restituito è CB_ERR se si verifica un errore. Il valore restituito è CB_ERRSPACE se è disponibile spazio insufficiente per archiviare le nuove stringhe.

Osservazioni:

Questa funzione non è supportata dal controllo Windows ComboBoxEx . Per altre informazioni su questo controllo, vedere ComboBoxEx Controlli in Windows SDK.

Esempio

// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
VERIFY(0 < ::GetWindowsDirectory(lpszWinPath, MAX_PATH));

// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);

m_pComboBox->ResetContent();
m_pComboBox->Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));

// Reset the current directory to its previous path.
::SetCurrentDirectory(lpszOldPath);

CComboBox::DrawItem

Chiamato dal framework quando cambia un aspetto visivo di una casella combinata di disegno proprietario.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parametri

lpDrawItemStruct
Puntatore a una DRAWITEMSTRUCT struttura che contiene informazioni sul tipo di disegno richiesto.

Osservazioni:

Il itemAction membro della DRAWITEMSTRUCT struttura definisce l'azione di disegno da eseguire. Vedere CWnd::OnDrawItem per una descrizione di questa struttura.

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 CComboBox proprietario. Prima di terminare questa funzione membro, l'applicazione deve ripristinare tutti gli oggetti GDI (Graphics Device Interface) selezionati per il contesto di visualizzazione fornito in lpDrawItemStruct.

Esempio

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example draws an item's text centered vertically and horizontally. The
// combo box control was created with the following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
   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. Erase
   // the 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);
   }

   // 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();
}

CComboBox::FindString

Trova, ma non seleziona, la prima stringa che contiene il prefisso specificato nella casella di riepilogo di una casella combinata.

int FindString(
    int nStartAfter,
    LPCTSTR lpszString) 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 -1, viene eseguita la ricerca dell'intera casella di riepilogo dall'inizio.

lpszString
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

Se il valore restituito è maggiore o uguale a 0, è l'indice in base zero dell'elemento corrispondente. È CB_ERR se la ricerca non è riuscita.

Osservazioni:

Questa funzione non è supportata dal controllo Windows ComboBoxEx . Per altre informazioni su questo controllo, vedere ComboBoxEx Controlli in Windows SDK.

Esempio

// The string to match.
LPCTSTR lpszmyString = _T("item");

// Delete all items that begin with the specified string.
int nItem = 0;
while ((nItem = m_pComboBox->FindString(nItem, lpszmyString)) != CB_ERR)
{
   m_pComboBox->DeleteString(nItem);
}

CComboBox::FindStringExact

Chiamare la FindStringExact funzione membro per trovare la prima stringa della casella di riepilogo (in una casella combinata) 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, pertanto questa stringa può contenere qualsiasi combinazione di lettere maiuscole e minuscole.

Valore restituito

Indice in base zero dell'elemento corrispondente o CB_ERR se la ricerca non è riuscita.

Osservazioni:

Se la casella combinata è stata creata con uno stile di disegno proprietario ma senza lo CBS_HASSTRINGS stile, FindStringExact tenta di trovare la corrispondenza con il valore doubleword rispetto al valore di lpszFind.

Esempio

// The string to match.
LPCTSTR lpszmyExactString = _T("item 5");

// Delete all items that exactly match the specified string.
int nDex = 0;
while ((nDex = m_pComboBox->FindStringExact(nDex, lpszmyExactString)) != CB_ERR)
{
   m_pComboBox->DeleteString(nDex);
}

CComboBox::GetComboBoxInfo

Recupera informazioni per l'oggetto CComboBox .

BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;

Parametri

*pcbi*<br/> A pointer to the [COMBOBOXINFO'](/windows/win32/api/winuser/ns-winuser-comboboxinfo).

Valore restituito

Restituisce TRUE in caso di esito positivo, FALSE in caso di errore.

Osservazioni:

Questa funzione membro emula la funzionalità del CB_GETCOMBOBOXINFO messaggio, come descritto in Windows SDK.

CComboBox::GetCount

Chiamare questa funzione membro per recuperare il numero di elementi nella parte casella di riepilogo di una casella combinata.

int GetCount() const;

Valore restituito

Numero di elementi. Il conteggio restituito è maggiore del valore di indice dell'ultimo elemento (l'indice è in base zero). È CB_ERR se si verifica un errore.

Esempio

// Add 10 items to the combo box.
CString strItem;
for (int i = 0; i < 10; i++)
{
   strItem.Format(_T("item %d"), i);
   m_pComboBox->AddString(strItem);
}

// Verify the 10 items were added to the combo box.
ASSERT(m_pComboBox->GetCount() == 10);

CComboBox::GetCueBanner

Ottiene il testo del segnale visualizzato per un controllo casella combinata.

CString GetCueBanner() const;

BOOL GetCueBanner(
    LPTSTR lpszText,
    int cchText) const;

Parametri

lpszText
[out] Puntatore a un buffer che riceve il testo del banner del segnale.

cchText
[in] Dimensione del buffer a cui punta il lpszText parametro.

Valore restituito

Nel primo overload, un CString oggetto che contiene il testo del banner del segnale, se esistente; in caso contrario, un CString oggetto con lunghezza zero.

oppure

Nel secondo overload, TRUE se questo metodo ha esito positivo; in caso contrario, FALSE.

Osservazioni:

Il testo cue è un prompt visualizzato nell'area di input del controllo casella combinata. Il testo del segnale viene visualizzato fino a quando l'utente non fornisce l'input.

Questo metodo invia il CB_GETCUEBANNER messaggio, descritto in Windows SDK.

CComboBox::GetCurSel

Chiamare questa funzione membro per determinare quale elemento della casella combinata è selezionata.

int GetCurSel() const;

Valore restituito

Indice in base zero dell'elemento attualmente selezionato nella casella di riepilogo di una casella combinata o CB_ERR se non è selezionato alcun elemento.

Osservazioni:

GetCurSel restituisce un indice nell'elenco.

Esempio

// Select the next item of the currently selected item
// in the combo box.
int nIndex = m_pComboBox->GetCurSel();
int nCount = m_pComboBox->GetCount();
if ((nIndex != CB_ERR) && (nCount > 1))
{
   if (++nIndex < nCount)
      m_pComboBox->SetCurSel(nIndex);
   else
      m_pComboBox->SetCurSel(0);
}

CComboBox::GetDroppedControlRect

Chiamare la GetDroppedControlRect funzione membro per recuperare le coordinate dello schermo della casella di riepilogo visibile (eliminata) di una casella combinata a discesa.

void GetDroppedControlRect(LPRECT lprect) const;

Parametri

lprect
Punta alla struttura RECT che deve ricevere le coordinate.

Esempio

// This example move a combo box so that the upper left
// corner of the combo box is at a specific point.

// The point to move the combo box to.
CPoint myPoint(30, 10);

CRect r;

m_pComboBox->GetDroppedControlRect(&r);

m_pComboBox->GetParent()->ScreenToClient(&r);
r.OffsetRect(myPoint - r.TopLeft());
m_pComboBox->MoveWindow(&r);

CComboBox::GetDroppedState

Chiamare la GetDroppedState funzione membro per determinare se la casella di riepilogo di una casella combinata a discesa è visibile (eliminata).

BOOL GetDroppedState() const;

Valore restituito

Diverso da zero se la casella di riepilogo è visibile; in caso contrario, 0.

Esempio

// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
   m_pComboBox->ShowDropDown(TRUE);

CComboBox::GetDroppedWidth

Chiamare questa funzione per recuperare la larghezza minima consentita, in pixel, della casella di riepilogo di una casella combinata.

int GetDroppedWidth() const;

Valore restituito

Se ha esito positivo, la larghezza minima consentita, in pixel; in caso contrario, CB_ERR.

Osservazioni:

Questa funzione si applica solo alle caselle combinate con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST .

Per impostazione predefinita, la larghezza minima consentita della casella di riepilogo a discesa è 0. La larghezza minima consentita può essere impostata chiamando SetDroppedWidth. Quando viene visualizzata la parte casella di riepilogo della casella combinata, la larghezza è maggiore della larghezza minima consentita o della larghezza della casella combinata.

Esempio

Vedere l'esempio per SetDroppedWidth.

CComboBox::GetEditSel

Ottiene le posizioni del carattere iniziale e finale della selezione corrente nel controllo di modifica di una casella combinata.

DWORD GetEditSel() const;

Valore restituito

Valore a 32 bit che contiene la posizione iniziale nella parola con ordine basso e la posizione del primo carattere non selezionato dopo la fine della selezione nella parola in ordine elevato. Se questa funzione viene utilizzata in una casella combinata senza un controllo di modifica, CB_ERR viene restituita.

Esempio

DWORD dwSel;

// Set the selection to be all characters after the current selection.
if ((dwSel = m_MyComboBox.GetEditSel()) != CB_ERR)
{
   m_MyComboBox.SetEditSel(HIWORD(dwSel), -1);
}

CComboBox::GetExtendedUI

Chiamare la GetExtendedUI funzione membro per determinare se una casella combinata ha l'interfaccia utente predefinita o l'interfaccia utente estesa.

BOOL GetExtendedUI() const;

Valore restituito

Diverso da zero se la casella combinata ha l'interfaccia utente estesa; in caso contrario, 0.

Osservazioni:

L'interfaccia utente estesa può essere identificata nei modi seguenti:

  • Facendo clic sul controllo statico viene visualizzata la casella di riepilogo solo per le caselle combinate con lo CBS_DROPDOWNLIST stile.

  • Premendo FRECCIA GIÙ viene visualizzata la casella di riepilogo (F4 è disabilitata).

Lo scorrimento nel controllo statico è disabilitato quando l'elenco di elementi non è visibile (i tasti di direzione sono disabilitati).

Esempio

// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
   m_pComboBox->SetExtendedUI(TRUE);

CComboBox::GetHorizontalExtent

Recupera dalla casella combinata la larghezza in pixel in base alla quale è possibile scorrere orizzontalmente la parte casella di riepilogo della casella combinata.

UINT GetHorizontalExtent() const;

Valore restituito

Larghezza scorrevole della parte casella di riepilogo della casella combinata, in pixel.

Osservazioni:

Questa opzione è applicabile solo se la parte casella di riepilogo della casella combinata ha una barra di scorrimento orizzontale.

Esempio

// Find the longest string in the combo box.
CString strText;
CSize sz;
UINT dxText = 0;
CDC *pDCCombo = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(i, strText);
   sz = pDCCombo->GetTextExtent(strText);

   if (sz.cx > (LONG)dxText)
      dxText = sz.cx;
}
m_pComboBox->ReleaseDC(pDCCombo);

// Set the horizontal extent only if the current extent is not large enough.
if (m_pComboBox->GetHorizontalExtent() < dxText)
{
   m_pComboBox->SetHorizontalExtent(dxText);
   ASSERT(m_pComboBox->GetHorizontalExtent() == dxText);
}

CComboBox::GetItemData

Recupera il valore a 32 bit fornito dall'applicazione associato all'elemento casella combinata specificata.

DWORD_PTR GetItemData(int nIndex) const;

Parametri

nIndex
Contiene l'indice in base zero di un elemento nella casella di riepilogo della casella combinata.

Valore restituito

Valore a 32 bit associato all'elemento o CB_ERR se si verifica un errore.

Osservazioni:

Il valore a 32 bit può essere impostato con il dwItemData parametro di una SetItemData chiamata di funzione membro. Usare la GetItemDataPtr funzione membro se il valore a 32 bit da recuperare è un puntatore (void *).

Esempio

// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   if (m_pComboBox->GetItemData(i) == 0)
   {
      m_pComboBox->SetItemData(i, (DWORD)-1);
   }
}

CComboBox::GetItemDataPtr

Recupera il valore a 32 bit fornito dall'applicazione associato all'elemento casella combinata specificata come puntatore (void *).

void* GetItemDataPtr(int nIndex) const;

Parametri

nIndex
Contiene l'indice in base zero di un elemento nella casella di riepilogo della casella combinata.

Valore restituito

Recupera un puntatore o -1 se si verifica un errore.

Esempio

LPVOID lpmyPtr = m_pComboBox->GetItemDataPtr(5);

// Check all the items in the combo box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   if (m_pComboBox->GetItemDataPtr(i) == lpmyPtr)
   {
      m_pComboBox->SetItemDataPtr(i, NULL);
   }
}

CComboBox::GetItemHeight

Chiamare la GetItemHeight funzione membro per recuperare l'altezza degli elementi dell'elenco in una casella combinata.

int GetItemHeight(int nIndex) const;

Parametri

nIndex
Specifica il componente della casella combinata di cui recuperare l'altezza. Se il nIndex parametro è -1, viene recuperata l'altezza della parte edit-control (o static-text) della casella combinata. Se la casella combinata ha lo CBS_OWNERDRAWVARIABLE stile , nIndex specifica l'indice in base zero dell'elemento di elenco di cui recuperare l'altezza. In caso contrario, nIndex deve essere impostato su 0.

Valore restituito

Altezza, in pixel, dell'elemento specificato in una casella combinata. Il valore restituito è CB_ERR se si verifica un errore.

Esempio

// Set the height of every item so the item
// is completely visible.
CString strLBText;
CSize size;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(i, strLBText);
   size = pDC->GetTextExtent(strLBText);

   // Only want to set the item height if the current height
   // is not big enough.
   if (m_pComboBox->GetItemHeight(i) < size.cy)
      m_pComboBox->SetItemHeight(i, size.cy);
}
m_pComboBox->ReleaseDC(pDC);

CComboBox::GetLBText

Ottiene una stringa dalla casella di riepilogo di una casella combinata.

int GetLBText(
    int nIndex,
    LPTSTR lpszText) const;

void GetLBText(
    int nIndex,
    CString& rString) const;

Parametri

nIndex
Contiene l'indice in base zero della stringa della casella di riepilogo da copiare.

lpszText
Punta a un buffer che deve ricevere la stringa. Il buffer deve avere spazio sufficiente per la stringa e un carattere Null di terminazione.

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 è CB_ERR.

Osservazioni:

Il secondo formato di questa funzione membro riempie un CString oggetto con il testo dell'elemento.
Se nIndex non è valido, questa funzione genera un'eccezione E_INVALIDARG (codice di errore: -2147024809, 0x80070057).

Esempio

// Dump all of the items in the combo box.
CString str1, str2;
int n;
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   n = m_pComboBox->GetLBTextLen(i);
   m_pComboBox->GetLBText(i, str1.GetBuffer(n));
   str1.ReleaseBuffer();

   str2.Format(_T("item %d: %s\r\n"), i, str1.GetBuffer(0));
   AFXDUMP(str2);
}

CComboBox::GetLBTextLen

Ottiene la lunghezza di una stringa nella casella di riepilogo di una casella combinata.

int GetLBTextLen(int nIndex) const;

Parametri

nIndex
Contiene l'indice in base zero della stringa della casella di riepilogo.

Valore restituito

Lunghezza della stringa in byte, escluso il carattere Null di terminazione. Se nIndex non specifica un indice valido, il valore restituito è CB_ERR.

Esempio

Vedere l'esempio per CComboBox::GetLBText.

CComboBox::GetLocale

Recupera le impostazioni locali utilizzate dalla casella combinata.

LCID GetLocale() const;

Valore restituito

Valore dell'identificatore delle impostazioni locali (LCID) per le stringhe nella casella combinata.

Osservazioni:

Le impostazioni locali vengono utilizzate, ad esempio, per determinare l'ordinamento delle stringhe in una casella combinata ordinata.

Esempio

Vedere l'esempio per CComboBox::SetLocale.

CComboBox::GetMinVisible

Ottiene il numero minimo di elementi visibili nell'elenco a discesa del controllo casella combinata corrente.

int GetMinVisible() const;

Valore restituito

Numero minimo di elementi visibili nell'elenco a discesa corrente.

Osservazioni:

Questo metodo invia il CB_GETMINVISIBLE messaggio, descritto in Windows SDK.

CComboBox::GetTopIndex

Recupera l'indice in base zero del primo elemento visibile nella parte casella di riepilogo della casella combinata.

int GetTopIndex() const;

Valore restituito

Indice in base zero del primo elemento visibile nella parte casella di riepilogo della casella combinata, in caso contrario. CB_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 nTop = m_pComboBox->GetCount() / 2;
if (m_pComboBox->GetTopIndex() < nTop)
{
   m_pComboBox->SetTopIndex(nTop);
   ASSERT(m_pComboBox->GetTopIndex() == nTop);
}

CComboBox::InitStorage

Alloca memoria per archiviare gli elementi della casella di riepilogo nella parte casella di riepilogo della casella combinata.

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

Se l'operazione ha esito positivo, il numero massimo di elementi che la parte casella di riepilogo della casella combinata può archiviare prima che sia necessaria una riallocazione della memoria. In caso contrario CB_ERRSPACE, significa che non è disponibile memoria sufficiente.

Osservazioni:

Chiamare questa funzione prima di aggiungere un numero elevato di elementi alla parte casella CComboBoxdi riepilogo di .

Solo Windows 95/98: il wParam 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.

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.

Esempio

// Initialize the storage of the combo box to be 256 strings with
// about 10 characters per string, performance improvement.
int nAlloc = pmyComboBox->InitStorage(256, 10);
ASSERT(nAlloc != CB_ERRSPACE);

// Add 256 items to the combo box.
CString strAdd;
for (int i = 0; i < 256; i++)
{
   strAdd.Format(_T("item string %d"), i);
   m_pComboBox->AddString(strAdd);
}

CComboBox::InsertString

Inserisce una stringa nella casella di riepilogo di una casella combinata.

int InsertString(
    int nIndex,
    LPCTSTR lpszString);

Parametri

nIndex
Contiene l'indice in base zero della posizione nella casella di riepilogo che riceverà la stringa. Se questo parametro è -1, la stringa viene aggiunta alla fine dell'elenco.

lpszString
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 è CB_ERR se si verifica un errore. Il valore restituito è CB_ERRSPACE se è disponibile spazio insufficiente per archiviare la nuova stringa.

Osservazioni:

A differenza della AddString funzione membro, la InsertString funzione membro non determina l'ordinamento di un elenco con lo CBS_SORT stile.

Nota

Questa funzione non è supportata dal controllo Windows ComboBoxEx . Per altre informazioni su questo controllo, vedere ComboBoxEx Controlli in Windows SDK.

Esempio

// Insert items in between existing items.
CString strIns;
int nItems = m_pComboBox->GetCount();
for (int i = 0; i < nItems; i++)
{
   strIns.Format(_T("item string %c"), (char)('A' + i));
   m_pComboBox->InsertString(2 * i, strIns);
}

CComboBox::LimitText

Limita la lunghezza in byte del testo che l'utente può immettere nel controllo di modifica di una casella combinata.

BOOL LimitText(int nMaxChars);

Parametri

nMaxChars
Specifica la lunghezza in byte del testo che l'utente può immettere. Se questo parametro è 0, la lunghezza del testo viene impostata su 65.535 byte.

Valore restituito

Diverso da zero se ha esito positivo. Se viene chiamato per una casella combinata con lo stile CBS_DROPDOWNLIST o per una casella combinata senza un controllo di modifica, il valore restituito è CB_ERR.

Osservazioni:

Se la casella combinata non ha lo stile CBS_AUTOHSCROLL, l'impostazione del limite di testo su maggiore delle dimensioni del controllo di modifica non avrà alcun effetto.

LimitText limita solo il testo che l'utente può immettere. Non ha alcun effetto sul testo già presente nel controllo di modifica quando il messaggio viene inviato, né influisce sulla lunghezza del testo copiato nel controllo di modifica quando viene selezionata una stringa nella casella di riepilogo.

Esempio

// Limit the number of characters in the combo box's edit control to
// be the maximum number visible.

// Get the text metrics for the combo box; needed for the
// average character width.
TEXTMETRIC tm;
CDC *pDCCB = m_pComboBox->GetDC();
pDCCB->GetTextMetrics(&tm);
m_pComboBox->ReleaseDC(pDCCB);

CRect rect;
m_pComboBox->GetClientRect(&rect);

m_pComboBox->LimitText(rect.Width() / tm.tmAveCharWidth);

CComboBox::MeasureItem

Chiamato dal framework quando viene creata una casella combinata 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 nella casella combinata. Se la casella combinata viene creata con lo CBS_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.

L'uso dello CBS_OWNERDRAWFIXED stile in una casella combinata di disegno proprietario creata con la SubclassDlgItem funzione membro di CWnd comporta ulteriori considerazioni sulla programmazione. Vedere la discussione nella nota tecnica 14.

Vedere CWnd::OnMeasureItem per una descrizione della MEASUREITEMSTRUCT struttura.

Esempio

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The combo box control was created with
// the following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
   ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);

   if (lpMeasureItemStruct->itemID != (UINT)-1)
   {
      LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
      ASSERT(lpszText != NULL);
      CSize sz;
      CDC *pDC = GetDC();

      sz = pDC->GetTextExtent(lpszText);

      ReleaseDC(pDC);

      lpMeasureItemStruct->itemHeight = 2 * sz.cy;
   }
}

CComboBox::Paste

Inserisce i dati dagli Appunti nel controllo di modifica della casella combinata in corrispondenza della posizione corrente del cursore.

void Paste();

Osservazioni:

I dati vengono inseriti solo se gli Appunti contengono dati in CF_TEXT formato .

Esempio

// Replace all of the text in the combo box's edit control with the text
// in the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Paste();

CComboBox::ResetContent

Rimuove tutti gli elementi dalla casella di riepilogo e il controllo di modifica di una casella combinata.

void ResetContent();

Esempio

// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);

CComboBox::SelectString

Cerca una stringa nella casella di riepilogo di una casella combinata e, se la stringa viene trovata, seleziona la stringa nella casella di riepilogo e la copia nel controllo di modifica.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszString);

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 -1, viene eseguita la ricerca dell'intera casella di riepilogo dall'inizio.

lpszString
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 selezionato se la stringa è stata trovata. Se la ricerca non è riuscita, il valore restituito è CB_ERR e la selezione corrente non viene modificata.

Osservazioni:

Una stringa viene selezionata solo se i caratteri iniziali (dal punto iniziale) corrispondono ai caratteri nella stringa di prefisso.

Si noti che le SelectString funzioni membro e FindString trovano entrambe una stringa, ma la SelectString funzione membro seleziona anche la stringa.

Esempio

// The string to match.
LPCTSTR lpszSelect = _T("item");

// Select the item that begins with the specified string.
int nSel = m_pComboBox->SelectString(0, lpszSelect);
ASSERT(nSel != CB_ERR);

CComboBox::SetCueBanner

Imposta il testo del segnale visualizzato per un controllo casella combinata.

BOOL SetCueBanner(LPCTSTR lpszText);

Parametri

lpszText
[in] Puntatore a un buffer con terminazione Null che contiene il testo del segnale.

Valore restituito

TRUE se il metodo riesce; in caso contrario, FALSE.

Osservazioni:

Il testo cue è un prompt visualizzato nell'area di input del controllo casella combinata. Il testo del segnale viene visualizzato fino a quando l'utente non fornisce l'input.

Questo metodo invia il CB_SETCUEBANNER messaggio, descritto in Windows SDK.

Esempio

Il primo esempio di codice definisce la variabile , m_combobox, usata per accedere a livello di codice al controllo casella combinata. Questa variabile viene usata nell'esempio riportato di seguito.

// Variable to access the combo box control
CComboBox m_combobox;

Nell'esempio di codice seguente viene impostato il banner segnale per il controllo casella combinata.

// Add extra initialization here.

// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
    str.Format(_T("Item %2d"), i);
    m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));

// End of extra initialization.

CComboBox::SetCurSel

Seleziona una stringa nella casella di riepilogo di una casella combinata.

int SetCurSel(int nSelect);

Parametri

nSelect
Specifica l'indice in base zero della stringa da selezionare. Se -1, qualsiasi selezione corrente nella casella di riepilogo viene rimossa e il controllo di modifica viene cancellato.

Valore restituito

Indice in base zero dell'elemento selezionato se il messaggio ha esito positivo. Il valore restituito è CB_ERR se nSelect è maggiore del numero di elementi nell'elenco o se nSelect è impostato su -1, che cancella la selezione.

Osservazioni:

Se necessario, la casella di riepilogo scorre la stringa nella visualizzazione (se la casella di riepilogo è visibile). Il testo nel controllo di modifica della casella combinata viene modificato in modo da riflettere la nuova selezione. Qualsiasi selezione precedente nella casella di riepilogo viene rimossa.

Esempio

// Select the last item in the combo box.
int nLast = pmyComboBox->GetCount() - 1;
if (nLast >= 0)
   m_pComboBox->SetCurSel(nLast);

CComboBox::SetDroppedWidth

Chiamare questa funzione per impostare la larghezza minima consentita, in pixel, della casella di riepilogo di una casella combinata.

int SetDroppedWidth(UINT nWidth);

Parametri

nWidth
Larghezza minima consentita della parte casella di riepilogo della casella combinata, in pixel.

Valore restituito

In caso di esito positivo, la nuova larghezza della casella di riepilogo, in caso contrario CB_ERR.

Osservazioni:

Questa funzione si applica solo alle caselle combinate con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST .

Per impostazione predefinita, la larghezza minima consentita della casella di riepilogo a discesa è 0. Quando viene visualizzata la parte casella di riepilogo della casella combinata, la larghezza è maggiore della larghezza minima consentita o della larghezza della casella combinata.

Esempio

// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->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_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(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_pComboBox->ReleaseDC(pDC);

// Adjust the width for the vertical scroll bar and the left and right border.
dx += ::GetSystemMetrics(SM_CXVSCROLL) + 2 * ::GetSystemMetrics(SM_CXEDGE);

// Set the width of the list box so that every item is completely visible.
m_pComboBox->SetDroppedWidth(dx);

CComboBox::SetEditSel

Seleziona i caratteri nel controllo di modifica di una casella combinata.

BOOL SetEditSel(
    int nStartChar,
    int nEndChar);

Parametri

nStartChar
Specifica la posizione iniziale. Se la posizione iniziale è impostata su -1, viene rimossa qualsiasi selezione esistente.

nEndChar
Specifica la posizione finale. Se la posizione finale è impostata su -1, viene selezionato tutto il testo dalla posizione iniziale all'ultimo carattere nel controllo di modifica.

Valore restituito

Diverso da zero se la funzione membro ha esito positivo; in caso contrario, 0. È CB_ERR se CComboBox ha lo CBS_DROPDOWNLIST stile o non ha una casella di riepilogo.

Osservazioni:

Le posizioni sono in base zero. Per selezionare il primo carattere del controllo di modifica, specificare una posizione iniziale pari a 0. La posizione finale è relativa al carattere subito dopo l'ultimo carattere da selezionare. Ad esempio, per selezionare i primi quattro caratteri del controllo di modifica, usare una posizione iniziale pari a 0 e una posizione finale pari a 4.

Nota

Questa funzione non è supportata dal controllo Windows ComboBoxEx . Per altre informazioni su questo controllo, vedere ComboBoxEx Controlli in Windows SDK.

Esempio

Vedere l'esempio per CComboBox::GetEditSel.

CComboBox::SetExtendedUI

Chiamare la SetExtendedUI funzione membro per selezionare l'interfaccia utente predefinita o l'interfaccia utente estesa per una casella combinata con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST .

int SetExtendedUI(BOOL bExtended = TRUE);

Parametri

bExtended
Specifica se la casella combinata deve usare l'interfaccia utente estesa o l'interfaccia utente predefinita. Il valore TRUE seleziona l'interfaccia utente estesa. Il valore FALSE seleziona l'interfaccia utente standard.

Valore restituito

CB_OKAY se l'operazione ha esito positivo o CB_ERR se si verifica un errore.

Osservazioni:

L'interfaccia utente estesa può essere identificata nei modi seguenti:

  • Facendo clic sul controllo statico viene visualizzata la casella di riepilogo solo per le caselle combinate con lo CBS_DROPDOWNLIST stile.

  • Premendo FRECCIA GIÙ viene visualizzata la casella di riepilogo (F4 è disabilitata).

Lo scorrimento nel controllo statico è disabilitato quando l'elenco di elementi non è visibile (i tasti di direzione sono disabilitati).

Esempio

Vedere l'esempio per CComboBox::GetExtendedUI.

CComboBox::SetHorizontalExtent

Imposta la larghezza, in pixel, in base alla quale è possibile scorrere orizzontalmente la parte casella di riepilogo della casella combinata.

void SetHorizontalExtent(UINT nExtent);

Parametri

nExtent
Specifica il numero di pixel in base al quale è possibile scorrere orizzontalmente la parte casella di riepilogo della casella combinata.

Osservazioni:

Se la larghezza della casella di riepilogo è inferiore a questo valore, la barra di scorrimento orizzontale scorrerà orizzontalmente gli elementi nella casella di riepilogo. Se la larghezza della casella di riepilogo è uguale o maggiore di questo valore, la barra di scorrimento orizzontale è nascosta o, se la casella combinata ha lo CBS_DISABLENOSCROLL stile, disabilitata.

Esempio

// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->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_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(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_pComboBox->ReleaseDC(pDC);

// Set the horizontal extent so every character of all strings can
// be scrolled to.
m_pComboBox->SetHorizontalExtent(dx);

CComboBox::SetItemData

Imposta il valore a 32 bit associato all'elemento specificato in una casella combinata.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

Parametri

nIndex
Contiene un indice in base zero per l'elemento da impostare.

dwItemData
Contiene il nuovo valore da associare all'elemento.

Valore restituito

CB_ERR se si verifica un errore.

Osservazioni:

Usare la SetItemDataPtr funzione membro se l'elemento a 32 bit deve essere un puntatore.

Esempio

// Set the data of each item to be equal to its index.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   m_pComboBox->SetItemData(i, i);
}

CComboBox::SetItemDataPtr

Imposta il valore a 32 bit associato all'elemento specificato in una casella combinata in modo che sia il puntatore specificato (void *).

int SetItemDataPtr(
    int nIndex,
    void* pData);

Parametri

nIndex
Contiene un indice in base zero per l'elemento.

pData
Contiene il puntatore da associare all'elemento.

Valore restituito

CB_ERR se si verifica un errore.

Osservazioni:

Questo puntatore rimane valido per la durata della casella combinata, anche se la posizione relativa dell'elemento all'interno della casella combinata 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_pComboBox->GetCount(); i++)
{
   m_pComboBox->SetItemDataPtr(i, NULL);
}

CComboBox::SetItemHeight

Chiamare la SetItemHeight funzione membro per impostare l'altezza degli elementi dell'elenco in una casella combinata o l'altezza della parte di controllo di modifica (o testo statico) di una casella combinata.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

Parametri

nIndex
Specifica se l'altezza degli elementi dell'elenco o l'altezza della parte di controllo di modifica (o testo statico) della casella combinata è impostata.

Se la casella combinata ha lo CBS_OWNERDRAWVARIABLE stile , nIndex specifica l'indice in base zero dell'elemento di elenco la cui altezza deve essere impostata. In caso contrario, nIndex deve essere 0 e verrà impostata l'altezza di tutti gli elementi dell'elenco.

Se nIndex è -1, deve essere impostata l'altezza della parte edit-control o static-text della casella combinata.

cyItemHeight
Specifica l'altezza, in pixel, del componente casella combinata identificata da nIndex.

Valore restituito

CB_ERR se l'indice o l'altezza non è valida; in caso contrario, 0.

Osservazioni:

L'altezza della parte di controllo di modifica (o testo statico) della casella combinata viene impostata indipendentemente dall'altezza degli elementi dell'elenco. Un'applicazione deve assicurarsi che l'altezza della parte di controllo di modifica (o testo statico) non sia inferiore all'altezza di un determinato elemento della 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 = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(i, str);
   sz = pDC->GetTextExtent(str);

   m_pComboBox->SetItemHeight(i, sz.cy);
}
m_pComboBox->ReleaseDC(pDC);

CComboBox::SetLocale

Imposta l'identificatore delle impostazioni locali per questa casella combinata.

LCID SetLocale(LCID nNewLocale);

Parametri

nNewLocale
Nuovo valore dell'identificatore delle impostazioni locali (LCID) da impostare per la casella combinata.

Valore restituito

Valore LCID (Locale Identifier) precedente per questa casella combinata.

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_pComboBox->SetLocale(mylcid);
ASSERT(m_pComboBox->GetLocale() == mylcid);

CComboBox::SetMinVisibleItems

Imposta il numero minimo di elementi visibili nell'elenco a discesa del controllo casella combinata corrente.

BOOL SetMinVisibleItems(int iMinVisible);

Parametri

iMinVisible
[in] Specifica il numero minimo di elementi visibili.

Valore restituito

TRUE se questo metodo ha esito positivo; in caso contrario, FALSE.

Osservazioni:

Questo metodo invia il CB_SETMINVISIBLE messaggio, descritto in Windows SDK.

Esempio

Il primo esempio di codice definisce la variabile , m_combobox, usata per accedere a livello di codice al controllo casella combinata. Questa variabile viene usata nell'esempio riportato di seguito.

// Variable to access the combo box control
CComboBox m_combobox;

Nell'esempio di codice successivo vengono inseriti 20 elementi nell'elenco a discesa di un controllo casella combinata. Specifica quindi che vengono visualizzati almeno 10 elementi quando un utente preme la freccia a discesa.

// Add extra initialization here.

// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
    str.Format(_T("Item %2d"), i);
    m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));

// End of extra initialization.

CComboBox::SetTopIndex

Assicura che un particolare elemento sia visibile nella parte casella di riepilogo della casella combinata.

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 CB_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 combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);

CComboBox::ShowDropDown

Visualizza o nasconde la casella di riepilogo di una casella combinata con lo CBS_DROPDOWN stile o CBS_DROPDOWNLIST .

void ShowDropDown(BOOL bShowIt = TRUE);

Parametri

bShowIt
Specifica se la casella di riepilogo a discesa deve essere visualizzata o nascosta. Il valore mostra la casella di TRUE riepilogo. Il valore nasconde la casella di FALSE riepilogo.

Osservazioni:

Per impostazione predefinita, una casella combinata di questo stile mostrerà la casella di riepilogo.

Questa funzione membro non ha alcun effetto su una casella combinata creata con lo CBS_SIMPLE stile .

Esempio

Vedere l'esempio per CComboBox::GetDroppedState.

Vedi anche

MFC Sample CTRLBARS
CWnd Classe
Grafico della gerarchia
CWnd Classe
CButton Classe
CEdit Classe
CListBox Classe
CScrollBar Classe
CStatic Classe
CDialog Classe