Sdílet prostřednictvím


CComboBox Třída

Poskytuje funkce pole se seznamem Windows.

Syntaxe

class CComboBox : public CWnd

Členové

Veřejné konstruktory

Název Popis
CComboBox::CComboBox CComboBox Vytvoří objekt.

Veřejné metody

Název Popis
CComboBox::AddString Přidá řetězec na konec seznamu v seznamu pole se seznamem nebo na seřazené pozici pro pole se seznamem se stylem CBS_SORT .
CComboBox::Clear Odstraní (vymaže) aktuální výběr( pokud existuje) v ovládacím prvku pro úpravy.
CComboBox::CompareItem Volané architekturou k určení relativní pozice nové položky seznamu v seřazené pole se seznamem nakreslený vlastníkem.
CComboBox::Copy Zkopíruje aktuální výběr(pokud existuje) do schránky ve CF_TEXT formátu.
CComboBox::Create Vytvoří pole se seznamem a připojí ho k objektu CComboBox .
CComboBox::Cut Odstraní (vyjme) aktuální výběr(pokud existuje) v ovládacím prvku pro úpravy a zkopíruje odstraněný text do schránky ve CF_TEXT formátu.
CComboBox::DeleteItem Volá se rozhraním při odstranění položky seznamu z pole se seznamem nakresleným vlastníkem.
CComboBox::DeleteString Odstraní řetězec ze seznamu pole se seznamem.
CComboBox::Dir Přidá seznam názvů souborů do seznamu pole se seznamem.
CComboBox::DrawItem Volá se podle architektury, když se změní vizuální aspekt pole se seznamem nakreslený vlastníkem.
CComboBox::FindString Najde první řetězec, který obsahuje zadanou předponu v seznamu pole se seznamem.
CComboBox::FindStringExact Najde první řetězec seznamu (v poli se seznamem), který odpovídá zadanému řetězci.
CComboBox::GetComboBoxInfo Načte informace o objektu CComboBox .
CComboBox::GetCount Načte počet položek v seznamu pole se seznamem.
CComboBox::GetCueBanner Získá cue text, který je zobrazen pro ovládací prvek pole se seznamem.
CComboBox::GetCurSel Načte index aktuálně vybrané položky(pokud existuje) v seznamu pole se seznamem.
CComboBox::GetDroppedControlRect Načte souřadnice obrazovky zobrazeného (vyřazeného) seznamu rozevíracího seznamu se seznamem.
CComboBox::GetDroppedState Určuje, jestli je seznam rozevíracího pole se seznamem viditelný (vyřazeno).
CComboBox::GetDroppedWidth Načte minimální povolenou šířku rozevíracího seznamu pole se seznamem.
CComboBox::GetEditSel Získá počáteční a koncovou pozici znaku aktuálního výběru v ovládacím prvku pro úpravy pole se seznamem.
CComboBox::GetExtendedUI Určuje, zda pole se seznamem má výchozí uživatelské rozhraní nebo rozšířené uživatelské rozhraní.
CComboBox::GetHorizontalExtent Vrátí šířku v pixelech, kterou lze vodorovně posunout část pole se seznamem.
CComboBox::GetItemData Načte 32bitovou hodnotu zadanou aplikací přidruženou k zadané položce pole se seznamem.
CComboBox::GetItemDataPtr Načte 32bitový ukazatel zadaný aplikací přidružený k zadané položce pole se seznamem.
CComboBox::GetItemHeight Načte výšku položek seznamu v poli se seznamem.
CComboBox::GetLBText Získá řetězec ze seznamu pole se seznamem.
CComboBox::GetLBTextLen Získá délku řetězce v seznamu pole se seznamem.
CComboBox::GetLocale Načte identifikátor národního prostředí pro pole se seznamem.
CComboBox::GetMinVisible Získá minimální počet viditelných položek v rozevíracím seznamu aktuálního pole se seznamem.
CComboBox::GetTopIndex Vrátí index první viditelné položky v části seznamu pole se seznamem.
CComboBox::InitStorage Předlokuje bloky paměti pro položky a řetězce v části seznamu pole se seznamem.
CComboBox::InsertString Vloží řetězec do seznamu pole se seznamem.
CComboBox::LimitText Omezí délku textu, který může uživatel zadat do ovládacího prvku pro úpravy pole se seznamem.
CComboBox::MeasureItem Volal rozhraní k určení dimenzí pole se seznamem při vytvoření pole se seznamem nakreslený vlastníkem.
CComboBox::Paste Vloží data ze schránky do ovládacího prvku pro úpravy na aktuální pozici kurzoru. Data se vloží jenom v případě, že schránka obsahuje data ve CF_TEXT formátu.
CComboBox::ResetContent Odebere všechny položky ze seznamu a upraví ovládací prvek pole se seznamem.
CComboBox::SelectString Vyhledá řetězec v seznamu pole se seznamem a pokud se řetězec najde, vybere řetězec v seznamu a zkopíruje řetězec do ovládacího prvku pro úpravy.
CComboBox::SetCueBanner Nastaví text upozornění, který se zobrazí pro ovládací prvek pole se seznamem.
CComboBox::SetCurSel Vybere řetězec v seznamu pole se seznamem.
CComboBox::SetDroppedWidth Nastaví minimální povolenou šířku rozevíracího seznamu pole se seznamem.
CComboBox::SetEditSel Vybere znaky v ovládacím prvku pro úpravy pole se seznamem.
CComboBox::SetExtendedUI Vybere buď výchozí uživatelské rozhraní, nebo rozšířené uživatelské rozhraní pro pole se seznamem, které má CBS_DROPDOWN styl nebo CBS_DROPDOWNLIST styl.
CComboBox::SetHorizontalExtent Nastaví šířku v pixelech, ve které lze vodorovně posunout část pole se seznamem.
CComboBox::SetItemData Nastaví 32bitovou hodnotu přidruženou k zadané položce v poli se seznamem.
CComboBox::SetItemDataPtr Nastaví 32bitový ukazatel přidružený k zadané položce v poli se seznamem.
CComboBox::SetItemHeight Nastaví výšku položek seznamu v poli se seznamem nebo výšku části ovládacího prvku pro úpravy (nebo statického textu) pole se seznamem.
CComboBox::SetLocale Nastaví identifikátor národního prostředí pro pole se seznamem.
CComboBox::SetMinVisibleItems Nastaví minimální počet viditelných položek v rozevíracím seznamu aktuálního pole se seznamem.
CComboBox::SetTopIndex Informuje část seznamu pole se seznamem, aby zobrazila položku se zadaným indexem v horní části.
CComboBox::ShowDropDown Zobrazí nebo skryje seznam pole se seznamem, které má CBS_DROPDOWN styl nebo CBS_DROPDOWNLIST styl.

Poznámky

Pole se seznamem se skládá ze seznamu v kombinaci se statickým ovládacím prvku nebo ovládacím prvku pro úpravy. Část ovládacího prvku v seznamu se může zobrazit vždy nebo může rozevírací seznam zobrazit pouze v okamžiku, kdy uživatel vybere šipku rozevíracího seznamu vedle ovládacího prvku.

Aktuálně vybraná položka (pokud existuje) v seznamu se zobrazí ve statickém nebo editačním ovládacím prvku. Kromě toho, pokud pole se seznamem má styl rozevíracího seznamu, uživatel může zadat počáteční znak jedné z položek v seznamu a pole seznamu, pokud je viditelné, zvýrazní další položku s tímto počátečním znakem.

Následující tabulka porovnává tři styly polí se seznamem.

Styl Kdy je seznam viditelný Statický nebo upravit ovládací prvek
Stručně Always Upravit
Rozevírací seznam Při vyřazení Upravit
Rozevírací seznam Při vyřazení staticky.

Objekt můžete vytvořit buď ze šablony dialogového CComboBox okna, nebo přímo v kódu. V obou případech nejprve zavolejte konstruktor CComboBox , který objekt sestaví CComboBox . Potom zavolejte Create členovu funkci, která vytvoří ovládací prvek a připojí ho k objektu CComboBox .

Pokud chcete zpracovávat zprávy oznámení systému Windows odeslané polem se seznamem nadřazené (obvykle třídy odvozené), CDialogpřidejte položku mapy zpráv a členovou funkci obslužné rutiny zpráv do nadřazené třídy pro každou zprávu.

Každá položka mapy zpráv má následující tvar:

ON_Notification( id, memberFxn )

kde id určuje ID podřízeného okna ovládacího prvku pole se seznamem odesílající oznámení a memberFxn je název nadřazené členské funkce, kterou jste napsali pro zpracování oznámení.

Prototyp funkce nadřazeného objektu je následující:

afx_msg void memberFxn( );

Pořadí, ve kterém se budou odesílat určitá oznámení, nelze předpovědět. Konkrétně CBN_SELCHANGE může dojít k oznámení před nebo po CBN_CLOSEUP oznámení.

Potenciální položky mapy zpráv jsou následující:

  • ON_CBN_CLOSEUP (Windows 3.1 a novější.) Seznam pole se seznamem se zavře. Tato zpráva s oznámením není odeslána pro pole se seznamem, které má CBS_SIMPLE styl.

  • ON_CBN_DBLCLK Uživatel dvakrát klikne na řetězec v seznamu pole se seznamem. Tato zpráva s oznámením se odešle pouze pro pole se seznamem se stylem CBS_SIMPLE . U pole se seznamem s motivem CBS_DROPDOWN nebo CBS_DROPDOWNLIST stylem nelze poklikáním dojít, protože jedno kliknutí skryje seznam.

  • ON_CBN_DROPDOWN Seznam pole se seznamem se chystá rozevírací seznam (být viditelný). Tato zpráva s oznámením může nastat pouze pro pole se seznamem s motivem CBS_DROPDOWN nebo CBS_DROPDOWNLIST stylem.

  • ON_CBN_EDITCHANGE Uživatel provedl akci, která mohla změnit text v části ovládacího prvku pro úpravy pole se seznamem. CBN_EDITUPDATE Na rozdíl od zprávy se tato zpráva odešle po aktualizaci obrazovky windows. Pokud pole se seznamem CBS_DROPDOWNLIST obsahuje styl, neodesílají se.

  • ON_CBN_EDITUPDATE Část ovládacího prvku pro úpravy pole se seznamem se chystá zobrazit změněný text. Tato zpráva s oznámením se odešle poté, co ovládací prvek naformátuje text, ale před zobrazením textu. Pokud pole se seznamem CBS_DROPDOWNLIST obsahuje styl, neodesílají se.

  • ON_CBN_ERRSPACE Pole se seznamem nemůže přidělit dostatek paměti pro splnění konkrétního požadavku.

  • ON_CBN_SELENDCANCEL (Windows 3.1 a novější.) Označuje, že se má zrušit výběr uživatele. Uživatel klikne na položku a potom klikne na jiné okno nebo ovládací prvek a skryje seznam pole se seznamem. Tato zpráva s oznámením se odešle před CBN_CLOSEUP oznámením, aby bylo možné označit, že má být výběr uživatele ignorován. Zpráva CBN_SELENDCANCEL s CBN_SELENDOK oznámením se odešle i v případě CBN_CLOSEUP , že zpráva s oznámením není odeslána (jako v případě pole se seznamem se stylem CBS_SIMPLE ).

  • ON_CBN_SELENDOK Uživatel vybere položku a pak buď stiskne klávesu ENTER, nebo klikne na klávesu ŠIPKA DOLŮ a skryje seznam pole se seznamem. Tato zpráva s oznámením se odešle před zprávou CBN_CLOSEUP , která značí, že má být výběr uživatele považován za platný. Zpráva CBN_SELENDCANCEL s CBN_SELENDOK oznámením se odešle i v případě CBN_CLOSEUP , že zpráva s oznámením není odeslána (jako v případě pole se seznamem se stylem CBS_SIMPLE ).

  • ON_CBN_KILLFOCUS Pole se seznamem ztrácí vstupní fokus.

  • ON_CBN_SELCHANGE Výběr v seznamu pole se seznamem se chystá změnit v důsledku toho, že uživatel buď klikne do seznamu, nebo změní výběr pomocí kláves se šipkami. Při zpracování této zprávy lze text v ovládacím prvku pro úpravy pole se seznamem načíst pouze prostřednictvím GetLBText nebo jiné podobné funkce. GetWindowText nelze použít.

  • ON_CBN_SETFOCUS Pole se seznamem obdrží vstupní fokus.

Pokud vytvoříte CComboBox objekt v dialogovém okně (prostřednictvím prostředku dialogového okna), CComboBox objekt se po zavření dialogového okna automaticky zničí.

Pokud vložíte objekt do jiného objektu CComboBox okna, nemusíte ho zničit. Pokud vytvoříte CComboBox objekt v zásobníku, automaticky se zničí. Pokud vytvoříte CComboBox objekt na haldě new pomocí funkce, musíte volat delete objekt, aby ho zničil při zničení pole se seznamem Windows.

Poznámka: Chcete-li zpracovávat WM_KEYDOWN a WM_CHAR zprávy, musíte podtřídět ovládací prvky pole se seznamem úpravy a seznamu, odvodit třídy z CEdit a CListBoxa přidat obslužné rutiny pro tyto zprávy do odvozených tříd. Další informace najdete na webu CWnd::SubclassWindow.

Hierarchie dědičnosti

CObject

CCmdTarget

CWnd

CComboBox

Požadavky

Záhlaví: afxwin.h

CComboBox::AddString

Přidá řetězec do seznamu pole se seznamem.

int AddString(LPCTSTR lpszString);

Parametry

lpszString
Odkazuje na řetězec ukončený hodnotou null, který se má přidat.

Návratová hodnota

Pokud je vrácená hodnota větší nebo rovna 0, jedná se o index založený na nule pro řetězec v seznamu. Vrácená hodnota je CB_ERR , pokud dojde k chybě. Vrácená hodnota je CB_ERRSPACE v případě, že není k dispozici dostatek místa pro uložení nového řetězce.

Poznámky

Pokud se seznam nevytvořil se stylem CBS_SORT , řetězec se přidá na konec seznamu. V opačném případě se řetězec vloží do seznamu a seznam se seřadí.

Poznámka:

Tato funkce není ovládacím prvek Windows ComboBoxEx podporována. Další informace o tomto ovládacím prvku naleznete v tématu ComboBoxEx Ovládací prvky v sadě Windows SDK.

Pokud chcete vložit řetězec do konkrétního umístění v seznamu, použijte členovou InsertString funkci.

Příklad

// 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

CComboBox Vytvoří objekt.

CComboBox();

Příklad

// Declare a local CComboBox object.
CComboBox myComboBox;

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

CComboBox::Clear

Odstraní (vymaže) aktuální výběr(pokud existuje) v ovládacím prvku pro úpravy pole se seznamem.

void Clear();

Poznámky

Pokud chcete odstranit aktuální výběr a umístit odstraněný obsah do schránky, použijte členovou Cut funkci.

Příklad

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

CComboBox::CompareItem

Volané architekturou k určení relativní pozice nové položky v části seznamu seřazeného pole se seznamem vlastník-draw.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

Parametry

lpCompareItemStruct
Dlouhý ukazatel na COMPAREITEMSTRUCT strukturu.

Návratová hodnota

Určuje relativní pozici dvou položek popsaných ve struktuře COMPAREITEMSTRUCT . Může to být libovolná z následujících hodnot:

Hodnota Význam
-1 Položka 1 seřadí před položkou 2.
0 Položka 1 a položka 2 seřadí stejně.
0 Položka 1 seřadí po položce 2.

Podívejte CWnd::OnCompareItem se na popis .COMPAREITEMSTRUCT

Poznámky

Ve výchozím nastavení tato členová funkce nic nedělá. Pokud vytvoříte pole se seznamem owner-draw se LBS_SORT stylem, musíte tuto členovou funkci přepsat, aby pomohla rozhraní při řazení nových položek přidaných do seznamu.

Příklad

// 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

Zkopíruje aktuální výběr (pokud existuje) v ovládacím prvku pro úpravy pole se seznamem do schránky ve CF_TEXT formátu.

void Copy();

Příklad

// 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

Vytvoří pole se seznamem a připojí ho k objektu CComboBox .

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

Parametry

dwStyle
Určuje styl pole se seznamem. U tohoto pole použijte libovolnou kombinaci stylů pole se seznamem.

rect
Odkazuje na pozici a velikost pole se seznamem. Může to být RECT struktura nebo CRect objekt.

pParentWnd
Určuje nadřazené okno pole se seznamem (obvykle a CDialog). Nesmí to být NULL.

nID
Určuje ID ovládacího prvku pole se seznamem.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Objekt vytvoříte CComboBox ve dvou krocích. Nejprve zavolejte konstruktor a potom volání Create, který vytvoří pole se seznamem Windows a připojí ho k objektu CComboBox .

Při Create spuštění systém Windows odešle WM_NCCREATEpole se seznamem , WM_NCCALCSIZEWM_CREATE, a WM_GETMINMAXINFO zprávy.

Tyto zprávy jsou zpracovávány ve výchozím nastavení OnNcCreatepomocí , OnCreate, OnNcCalcSizea OnGetMinMaxInfo členské funkce v CWnd základní třídě. Chcete-li rozšířit výchozí zpracování zpráv, odvodit třídu z CComboBox, přidat mapu zprávy do nové třídy a přepsat předchozí členské funkce obslužné rutiny zprávy. Přepsat OnCreate, například provést potřebné inicializace pro novou třídu.

U ovládacího prvku pole se seznamem použijte následující styly oken. :

  • WS_CHILD Vždy

  • WS_VISIBLE Obvykle

  • WS_DISABLED Zřídka

  • WS_VSCROLL Přidání svislého posouvání seznamu do pole se seznamem

  • WS_HSCROLL Přidání vodorovného posouvání seznamu do pole se seznamem

  • WS_GROUP Seskupení ovládacích prvků

  • WS_TABSTOP Zahrnutí pole se seznamem do pořadí ovládacích prvků

Příklad

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

CComboBox::Cut

Odstraní (vyjme) aktuální výběr(pokud existuje) v ovládacím prvku pro úpravy pole se seznamem a zkopíruje odstraněný text do schránky ve CF_TEXT formátu.

void Cut();

Poznámky

Pokud chcete odstranit aktuální výběr bez umístění odstraněného textu do schránky, zavolejte členovou Clear funkci.

Příklad

// 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

Volá se rozhraním, když uživatel odstraní položku z objektu pro kreslení CComboBox vlastníka nebo zničí pole se seznamem.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Parametry

lpDeleteItemStruct
Dlouhý ukazatel na strukturu Systému Windows DELETEITEMSTRUCT , která obsahuje informace o odstraněné položce. Popis CWnd::OnDeleteItem této struktury najdete.

Poznámky

Výchozí implementace této funkce nic nedělá. Přepište tuto funkci tak, aby podle potřeby překreslila pole se seznamem.

Příklad

// 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

Odstraní položku na pozici nIndex z pole se seznamem.

int DeleteString(UINT nIndex);

Parametry

nIndex
Určuje index řetězce, který se má odstranit.

Návratová hodnota

Pokud je vrácená hodnota větší nebo rovna 0, jedná se o počet řetězců zbývajících v seznamu. Vrácená hodnota je CB_ERR , pokud nIndex určuje index větší než počet položek v seznamu.

Poznámky

Všechny následující nIndex položky se teď přesunou o jednu pozici dolů. Pokud například pole se seznamem obsahuje dvě položky, odstranění první položky způsobí, že zbývající položka bude nyní na první pozici. nIndex=0 pro položku na první pozici.

Příklad

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

CComboBox::Dir

Přidá seznam názvů souborů nebo jednotek do seznamu pole se seznamem.

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

Parametry

attr
Může se jednat o libovolnou kombinaci hodnot popsaných enum v CFile::GetStatus následujících hodnotách nebo jejich kombinaci:

  • DDL_READWRITE Soubor lze číst nebo zapisovat do.

  • DDL_READONLY Soubor lze číst, ale ne zapisovat do.

  • DDL_HIDDEN Soubor je skrytý a nezobrazuje se ve výpisu adresáře.

  • DDL_SYSTEM Soubor je systémový soubor.

  • DDL_DIRECTORY Název určený zadáním lpszWildCard adresáře.

  • DDL_ARCHIVE Soubor byl archivován.

  • DDL_DRIVES Zahrňte všechny jednotky, které odpovídají názvu určenému uživatelem lpszWildCard.

  • DDL_EXCLUSIVE Výhradní příznak. Pokud je nastaven výhradní příznak, jsou uvedeny pouze soubory zadaného typu. V opačném případě jsou soubory zadaného typu uvedeny kromě "normálních" souborů.

lpszWildCard
Odkazuje na řetězec specifikace souboru. Řetězec může obsahovat zástupné znaky (například *.*).

Návratová hodnota

Pokud je vrácená hodnota větší nebo rovna 0, jedná se o index založený na nule posledního názvu souboru přidaného do seznamu. Vrácená hodnota je CB_ERR v případě, že dojde k chybě. Vrácená hodnota je CB_ERRSPACE v případě, že není k dispozici dostatek místa pro uložení nových řetězců.

Poznámky

Tato funkce není ovládacím prvek Windows ComboBoxEx podporována. Další informace o tomto ovládacím prvku naleznete v tématu ComboBoxEx Ovládací prvky v sadě Windows SDK.

Příklad

// 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

Volá se podle architektury, když se změní vizuální aspekt pole se seznamem owner-draw.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parametry

lpDrawItemStruct
Ukazatel na DRAWITEMSTRUCT strukturu, která obsahuje informace o typu požadovaného výkresu.

Poznámky

Člen itemAction DRAWITEMSTRUCT struktury definuje akci výkresu, která se má provést. Popis CWnd::OnDrawItem této struktury najdete.

Ve výchozím nastavení tato členová funkce nic nedělá. Přepište tuto členovou funkci tak, aby implementovaly výkres pro objekt pro kreslení CComboBox vlastníka. Před ukončením této členské funkce by aplikace měla obnovit všechny objekty rozhraní grafického zařízení (GDI) vybrané pro kontext zobrazení zadaný v lpDrawItemStruct.

Příklad

// 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

Najde, ale nevybere, první řetězec, který obsahuje zadanou předponu v seznamu pole se seznamem.

int FindString(
    int nStartAfter,
    LPCTSTR lpszString) const;

Parametry

nStartAfter
Obsahuje index položky založený na nule před první položkou, která se má prohledávat. Když hledání dosáhne dolní části seznamu, pokračuje od horní části seznamu zpět k položce určené nStartAfter. Pokud -1, prohledá se celé pole seznamu od začátku.

lpszString
Odkazuje na řetězec ukončený hodnotou null, který obsahuje předponu, kterou chcete vyhledat. Hledání je nezávislé na velikosti písmen, takže tento řetězec může obsahovat libovolnou kombinaci velkých a malých písmen.

Návratová hodnota

Pokud je vrácená hodnota větší nebo rovna 0, jedná se o index založený na nule odpovídající položky. CB_ERR Je to v případě, že hledání nebylo úspěšné.

Poznámky

Tato funkce není ovládacím prvek Windows ComboBoxEx podporována. Další informace o tomto ovládacím prvku naleznete v tématu ComboBoxEx Ovládací prvky v sadě Windows SDK.

Příklad

// 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

Voláním FindStringExact členské funkce vyhledejte první řetězec seznamu (v poli se seznamem), který odpovídá řetězci zadanému v lpszFindpoli se seznamem .

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

Parametry

nIndexStart
Určuje index položky založený na nule před první položkou, která se má prohledávat. Když hledání dosáhne dolní části seznamu, pokračuje od horní části seznamu zpět k položce určené nIndexStart. Pokud nIndexStart je -1, prohledá se celé pole seznamu od začátku.

lpszFind
Odkazuje na řetězec ukončený hodnotou null, který chcete vyhledat. Tento řetězec může obsahovat úplný název souboru, včetně přípony. Hledání nerozlišuje malá a velká písmena, takže tento řetězec může obsahovat libovolnou kombinaci velkých a malých písmen.

Návratová hodnota

Index odpovídající položky založený na nule nebo CB_ERR pokud hledání nebylo úspěšné.

Poznámky

Pokud bylo pole se seznamem vytvořeno se stylem kreslení vlastníka, ale bez CBS_HASSTRINGS stylu, FindStringExact pokusí se spárovat hodnotu dvojitého slova s hodnotou lpszFind.

Příklad

// 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

Načte informace o objektu CComboBox .

BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;

Parametry

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

Návratová hodnota

Vrátí TRUE úspěch FALSE při selhání.

Poznámky

Tato členová funkce emuluje funkce CB_GETCOMBOBOXINFO zprávy, jak je popsáno v sadě Windows SDK.

CComboBox::GetCount

Voláním této členské funkce načtěte počet položek v části seznamu pole se seznamem.

int GetCount() const;

Návratová hodnota

Početpoložekch Vrácený počet je větší než hodnota indexu poslední položky (index je založený na nule). CB_ERR Pokud dojde k chybě.

Příklad

// 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

Získá cue text, který je zobrazen pro ovládací prvek pole se seznamem.

CString GetCueBanner() const;

BOOL GetCueBanner(
    LPTSTR lpszText,
    int cchText) const;

Parametry

lpszText
[ven] Ukazatel na vyrovnávací paměť, která přijímá text banneru s upozorněním.

cchText
[v] Velikost vyrovnávací paměti, na kterou lpszText parametr odkazuje.

Návratová hodnota

V prvním přetížení objekt CString obsahující text banneru cue, pokud existuje; jinak objekt, CString který má nulovou délku.

nebo

V druhém přetížení, TRUE pokud je tato metoda úspěšná; jinak , FALSE.

Poznámky

Upozornění je výzva, která se zobrazí ve vstupní oblasti ovládacího prvku pole se seznamem. Text upozornění se zobrazí, dokud uživatel zadá vstup.

Tato metoda odešle CB_GETCUEBANNER zprávu popsanou v sadě Windows SDK.

CComboBox::GetCurSel

Voláním této členské funkce určíte, která položka v poli se seznamem je vybrána.

int GetCurSel() const;

Návratová hodnota

Index na základě nuly aktuálně vybrané položky v seznamu pole se seznamem nebo CB_ERR pokud není vybrána žádná položka.

Poznámky

GetCurSel vrátí index do seznamu.

Příklad

// 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

Voláním GetDroppedControlRect členské funkce načtěte souřadnice obrazovky viditelného (vyřazeného) seznamu rozevíracího seznamu.

void GetDroppedControlRect(LPRECT lprect) const;

Parametry

lprect
Odkazuje na strukturu RECT, která má přijímat souřadnice.

Příklad

// 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

Voláním GetDroppedState členské funkce určíte, jestli je seznam rozevíracího seznamu viditelný (vyřazeno).

BOOL GetDroppedState() const;

Návratová hodnota

Nenulové, pokud je seznam viditelný; jinak 0.

Příklad

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

CComboBox::GetDroppedWidth

Voláním této funkce načtete minimální povolenou šířku v pixelech seznamu pole se seznamem.

int GetDroppedWidth() const;

Návratová hodnota

V případě úspěchu je minimální povolená šířka v pixelech; v opačném případě . CB_ERR

Poznámky

Tato funkce se vztahuje pouze na pole se seznamem s tímto stylemCBS_DROPDOWN.CBS_DROPDOWNLIST

Ve výchozím nastavení je minimální povolená šířka rozevíracího seznamu 0. Minimální povolenou šířku lze nastavit voláním SetDroppedWidth. Když se zobrazí část pole se seznamem, její šířka je větší z minimální povolené šířky nebo šířky pole se seznamem.

Příklad

Podívejte se na příklad pro SetDroppedWidth.

CComboBox::GetEditSel

Získá počáteční a koncovou pozici znaku aktuálního výběru v ovládacím prvku pro úpravy pole se seznamem.

DWORD GetEditSel() const;

Návratová hodnota

32bitová hodnota, která obsahuje počáteční pozici ve slově s nízkým pořadím a pozici prvního nevybraného znaku za koncem výběru ve slově s vysokým pořadím. Pokud se tato funkce používá v poli se seznamem bez ovládacího prvku pro úpravy, CB_ERR vrátí se.

Příklad

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

Voláním GetExtendedUI členské funkce určíte, zda pole se seznamem má výchozí uživatelské rozhraní nebo rozšířené uživatelské rozhraní.

BOOL GetExtendedUI() const;

Návratová hodnota

Nenulové, pokud pole se seznamem obsahuje rozšířené uživatelské rozhraní; jinak 0.

Poznámky

Rozšířené uživatelské rozhraní lze identifikovat následujícími způsoby:

  • Kliknutím na statický ovládací prvek zobrazíte seznam pouze pro pole se seznamem se stylem CBS_DROPDOWNLIST .

  • Stisknutím klávesy ŠIPKA DOLŮ se zobrazí seznam (klávesa F4 je zakázaná).

Posouvání ve statickém ovládacím prvku je zakázané, když seznam položek není viditelný (jsou zakázané klávesy se šipkami).

Příklad

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

CComboBox::GetHorizontalExtent

Načte z pole se seznamem šířku v pixelech, podle kterých lze vodorovně posunout část seznamu pole se seznamem.

UINT GetHorizontalExtent() const;

Návratová hodnota

Posunutí šířky části pole se seznamem v pixelech

Poznámky

To platí jenom v případě, že část pole se seznamem obsahuje vodorovný posuvník.

Příklad

// 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

Načte 32bitovou hodnotu zadanou aplikací přidruženou k zadané položce pole se seznamem.

DWORD_PTR GetItemData(int nIndex) const;

Parametry

nIndex
Obsahuje index položky založené na nule v seznamu pole se seznamem.

Návratová hodnota

32bitová hodnota přidružená k položce nebo CB_ERR pokud dojde k chybě.

Poznámky

32bitovou hodnotu lze nastavit pomocí dwItemData parametru SetItemData volání členské funkce. GetItemDataPtr Členské funkce použijte, pokud 32bitová hodnota, kterou chcete načíst, je ukazatel (void *).

Příklad

// 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

Načte 32bitovou hodnotu zadanou aplikací přidruženou k zadané položce pole se seznamem jako ukazatel (void *).

void* GetItemDataPtr(int nIndex) const;

Parametry

nIndex
Obsahuje index položky založené na nule v seznamu pole se seznamem.

Návratová hodnota

Načte ukazatel nebo -1, pokud dojde k chybě.

Příklad

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

Voláním GetItemHeight členské funkce načtěte výšku položek seznamu v poli se seznamem.

int GetItemHeight(int nIndex) const;

Parametry

nIndex
Určuje součást pole se seznamem, jehož výška se má načíst. nIndex Pokud je parametr -1, načte se výška části textového ovládacího prvku (nebo statického textu) pole se seznamem. Pokud pole se seznamem CBS_OWNERDRAWVARIABLE má styl, nIndex určuje index seznamu založený na nule, jehož výška se má načíst. nIndex V opačném případě by mělo být nastaveno na hodnotu 0.

Návratová hodnota

Výška zadané položky v poli se seznamem v pixelech. Vrácená hodnota je CB_ERR v případě, že dojde k chybě.

Příklad

// 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

Získá řetězec ze seznamu pole se seznamem.

int GetLBText(
    int nIndex,
    LPTSTR lpszText) const;

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

Parametry

nIndex
Obsahuje index založený na nule řetězce seznamu, který se má zkopírovat.

lpszText
Odkazuje na vyrovnávací paměť, která má řetězec přijmout. Vyrovnávací paměť musí mít dostatek místa pro řetězec a ukončující znak null.

rString
Odkaz na .CString

Návratová hodnota

Délka řetězce (v bajtech) s výjimkou ukončujícího znaku null. Pokud nIndex neurčí platný index, návratová hodnota je CB_ERR.

Poznámky

Druhý formulář této členské funkce vyplní CString objekt textem položky.
Pokud nIndex je neplatná, tato funkce vyvolá E_INVALIDARG výjimku (kód chyby: -2147024809, 0x80070057).

Příklad

// 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

Získá délku řetězce v seznamu pole se seznamem.

int GetLBTextLen(int nIndex) const;

Parametry

nIndex
Obsahuje index založený na nule řetězce seznamu.

Návratová hodnota

Délka řetězce v bajtech s výjimkou ukončujícího znaku null. Pokud nIndex neurčí platný index, návratová hodnota je CB_ERR.

Příklad

Podívejte se na příklad pro CComboBox::GetLBText.

CComboBox::GetLocale

Načte národní prostředí používané polem se seznamem.

LCID GetLocale() const;

Návratová hodnota

Hodnota identifikátoru národního prostředí (LCID) pro řetězce v poli se seznamem.

Poznámky

Národní prostředí se používá například k určení pořadí řazení řetězců v seřazených polích se seznamem.

Příklad

Podívejte se na příklad pro CComboBox::SetLocale.

CComboBox::GetMinVisible

Získá minimální počet viditelných položek v rozevíracím seznamu aktuálního ovládacího prvku pole se seznamem.

int GetMinVisible() const;

Návratová hodnota

Minimální počet viditelných položek v aktuálním rozevíracím seznamu

Poznámky

Tato metoda odešle CB_GETMINVISIBLE zprávu popsanou v sadě Windows SDK.

CComboBox::GetTopIndex

Načte index založený na nule první viditelné položky v části seznamu pole se seznamem.

int GetTopIndex() const;

Návratová hodnota

Index založený na nule první viditelné položky v části seznamu pole se seznamem v případě úspěchu, CB_ERR jinak.

Poznámky

Zpočátku je položka 0 v horní části seznamu, ale pokud je seznam posunut, může být v horní části jiná položka.

Příklad

// 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

Přidělí paměť pro ukládání položek seznamu do části seznamu pole se seznamem.

int InitStorage(
    int nItems,
    UINT nBytes);

Parametry

nItems
Určuje počet položek, které se mají přidat.

nBytes
Určuje velikost paměti v bajtech, která se má přidělit pro řetězce položek.

Návratová hodnota

V případě úspěchu může být maximální počet položek, které část seznamu pole se seznamem může uložit před potřebou relokace paměti, jinak CB_ERRSPACEto znamená, že není k dispozici dostatek paměti.

Poznámky

Volejte tuto funkci před přidáním velkého počtu položek do části seznamu v CComboBoxsadě .

Pouze Windows 95/98: Parametr wParam je omezen na 16bitové hodnoty. To znamená, že seznamy nesmí obsahovat více než 32 767 položek. I když je počet položek omezený, celková velikost položek v seznamu je omezená pouze dostupnou pamětí.

Tato funkce pomáhá urychlit inicializaci polí seznamu s velkým počtem položek (více než 100). Předem přiděluje zadanou velikost paměti, aby následné AddStringInsertStringfunkce a Dir funkce trvalo nejkratší možnou dobu. Pro parametry můžete použít odhady. Pokud nadlimitujete, je přidělena nějaká další paměť; pokud podceňujete, použije se normální přidělení pro položky, které překračují předem přidělenou částku.

Příklad

// 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

Vloží řetězec do seznamu pole se seznamem.

int InsertString(
    int nIndex,
    LPCTSTR lpszString);

Parametry

nIndex
Obsahuje index založený na nule na pozici v seznamu, který obdrží řetězec. Pokud je tento parametr -1, řetězec se přidá na konec seznamu.

lpszString
Odkazuje na řetězec ukončený hodnotou null, který se má vložit.

Návratová hodnota

Index založený na nule pozice, do které byl řetězec vložen. Vrácená hodnota je CB_ERR v případě, že dojde k chybě. Vrácená hodnota je v případě, že není CB_ERRSPACE k dispozici dostatek místa pro uložení nového řetězce.

Poznámky

AddString Na rozdíl od členské funkce nezpůsobí členová funkce InsertString řazení seznamu se stylemCBS_SORT.

Poznámka:

Tato funkce není ovládacím prvek Windows ComboBoxEx podporována. Další informace o tomto ovládacím prvku naleznete v tématu ComboBoxEx Ovládací prvky v sadě Windows SDK.

Příklad

// 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

Omezuje délku v bajtech textu, který může uživatel zadat do ovládacího prvku pro úpravy pole se seznamem.

BOOL LimitText(int nMaxChars);

Parametry

nMaxChars
Určuje délku (v bajtech) textu, který může uživatel zadat. Pokud je tento parametr 0, je délka textu nastavená na 65 535 bajtů.

Návratová hodnota

Nenulové, pokud je úspěšné. Pokud je volána pole se seznamem se stylem CBS_DROPDOWNLIST nebo pole se seznamem bez ovládacího prvku pro úpravy, vrátí se hodnota CB_ERR.

Poznámky

Pokud pole se seznamem nemá styl CBS_AUTOHSCROLL, nastavení limitu textu na větší než velikost ovládacího prvku pro úpravy nebude mít žádný vliv.

LimitText omezuje pouze text, který může uživatel zadat. Nemá žádný vliv na žádný text, který je již v ovládacím prvku pro úpravy při odeslání zprávy, ani nemá vliv na délku textu zkopírovaného do ovládacího prvku pro úpravy, pokud je vybrán řetězec v seznamu.

Příklad

// 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

Volá se podle architektury, když se vytvoří pole se seznamem se stylem kreslení vlastníka.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Parametry

lpMeasureItemStruct
Dlouhý ukazatel na MEASUREITEMSTRUCT strukturu.

Poznámky

Ve výchozím nastavení tato členová funkce nic nedělá. Přepište tuto členovou funkci a vyplňte MEASUREITEMSTRUCT strukturu, aby systém Windows informoval o rozměrech seznamu v poli se seznamem. Pokud je pole se seznamem vytvořeno se stylem CBS_OWNERDRAWVARIABLE , architektura volá tuto členovou funkci pro každou položku v seznamu. V opačném případě je tento člen volána pouze jednou.

CBS_OWNERDRAWFIXED Použití stylu v poli se seznamem vlastník-kreslení vytvořeném pomocí SubclassDlgItem členské funkce CWnd zahrnuje další aspekty programování. Podívejte se na diskuzi v technické poznámce 14.

Podívejte CWnd::OnMeasureItem se na popis MEASUREITEMSTRUCT struktury.

Příklad

// 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

Vloží data ze schránky do ovládacího prvku pro úpravy pole se seznamem na aktuální pozici kurzoru.

void Paste();

Poznámky

Data se vloží jenom v případě, že schránka obsahuje data ve CF_TEXT formátu.

Příklad

// 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

Odebere všechny položky ze seznamu a upraví ovládací prvek pole se seznamem.

void ResetContent();

Příklad

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

CComboBox::SelectString

Vyhledá řetězec v seznamu pole se seznamem a pokud se řetězec najde, vybere řetězec v seznamu a zkopíruje ho do ovládacího prvku pro úpravy.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszString);

Parametry

nStartAfter
Obsahuje index položky založený na nule před první položkou, která se má prohledávat. Když hledání dosáhne dolní části seznamu, pokračuje od horní části seznamu zpět k položce určené nStartAfter. Pokud -1, prohledá se celé pole seznamu od začátku.

lpszString
Odkazuje na řetězec ukončený hodnotou null, který obsahuje předponu, kterou chcete vyhledat. Hledání je nezávislé na velikosti písmen, takže tento řetězec může obsahovat libovolnou kombinaci velkých a malých písmen.

Návratová hodnota

Index vybrané položky založený na nule, pokud byl nalezen řetězec. Pokud hledání nebylo úspěšné, je vrácená hodnota CB_ERR a aktuální výběr se nezmění.

Poznámky

Řetězec je vybrán pouze v případě, že počáteční znaky (od počátečního bodu) odpovídají znakům v řetězci předpony.

Všimněte si, že SelectString FindString obě členské funkce najdou řetězec, ale SelectString členová funkce také vybere řetězec.

Příklad

// 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

Nastaví text upozornění, který se zobrazí pro ovládací prvek pole se seznamem.

BOOL SetCueBanner(LPCTSTR lpszText);

Parametry

lpszText
[v] Ukazatel na vyrovnávací paměť s ukončenou hodnotou null, která obsahuje text upozornění.

Návratová hodnota

TRUEpokud je metoda úspěšná; v opačném případě . FALSE

Poznámky

Upozornění je výzva, která se zobrazí ve vstupní oblasti ovládacího prvku pole se seznamem. Text upozornění se zobrazí, dokud uživatel zadá vstup.

Tato metoda odešle CB_SETCUEBANNER zprávu popsanou v sadě Windows SDK.

Příklad

První příklad kódu definuje proměnnou , m_comboboxkterá se používá pro programový přístup k ovládacímu prvku pole se seznamem. Tato proměnná se používá v dalším příkladu.

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

Následující příklad kódu nastaví banner nápovědy pro ovládací prvek pole se seznamem.

// 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

Vybere řetězec v seznamu pole se seznamem.

int SetCurSel(int nSelect);

Parametry

nSelect
Určuje index řetězce založený na nule, který chcete vybrat. Pokud -1, odebere se jakýkoli aktuální výběr v seznamu a ovládací prvek pro úpravy se zruší.

Návratová hodnota

Index položky na základě nuly, pokud je zpráva úspěšná. Vrácená hodnota je CB_ERR , pokud nSelect je větší než počet položek v seznamu nebo pokud nSelect je nastavena na hodnotu -1, čímž se výběr vymaže.

Poznámky

V případě potřeby se seznam posune řetězec do zobrazení (pokud je seznam viditelný). Text v ovládacím prvku pro úpravy pole se seznamem se změní tak, aby odrážel nový výběr. Odebere se jakýkoli předchozí výběr v seznamu.

Příklad

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

CComboBox::SetDroppedWidth

Voláním této funkce nastavíte minimální povolenou šířku v pixelech v seznamu pole se seznamem.

int SetDroppedWidth(UINT nWidth);

Parametry

nWidth
Minimální povolená šířka části seznamu pole se seznamem v pixelech.

Návratová hodnota

V případě úspěchu je nová šířka seznamu, jinak CB_ERR.

Poznámky

Tato funkce se vztahuje pouze na pole se seznamem s tímto stylemCBS_DROPDOWN.CBS_DROPDOWNLIST

Ve výchozím nastavení je minimální povolená šířka rozevíracího seznamu 0. Když se zobrazí část pole se seznamem, její šířka je větší z minimální povolené šířky nebo šířky pole se seznamem.

Příklad

// 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

Vybere znaky v ovládacím prvku pro úpravy pole se seznamem.

BOOL SetEditSel(
    int nStartChar,
    int nEndChar);

Parametry

nStartChar
Určuje počáteční pozici. Pokud je počáteční pozice nastavena na hodnotu -1, odebere se veškerý existující výběr.

nEndChar
Určuje koncovou pozici. Pokud je koncová pozice nastavená na hodnotu -1, vybere se veškerý text od počáteční pozice po poslední znak v ovládacím prvku pro úpravy.

Návratová hodnota

Nenulové, pokud je členová funkce úspěšná; jinak 0. Je CB_ERR to, pokud CComboBoxCBS_DROPDOWNLIST styl nebo nemá seznam.

Poznámky

Pozice jsou založené na nule. Pokud chcete vybrat první znak ovládacího prvku pro úpravy, zadejte počáteční pozici 0. Koncová pozice je pro znak těsně za posledním znakem, který chcete vybrat. Pokud chcete například vybrat první čtyři znaky ovládacího prvku pro úpravy, použili byste počáteční pozici 0 a koncovou pozici 4.

Poznámka:

Tato funkce není ovládacím prvek Windows ComboBoxEx podporována. Další informace o tomto ovládacím prvku naleznete v tématu ComboBoxEx Ovládací prvky v sadě Windows SDK.

Příklad

Podívejte se na příklad pro CComboBox::GetEditSel.

CComboBox::SetExtendedUI

SetExtendedUI Voláním členské funkce vyberte výchozí uživatelské rozhraní nebo rozšířené uživatelské rozhraní pro pole se seznamem, které má styl CBS_DROPDOWN nebo CBS_DROPDOWNLIST styl.

int SetExtendedUI(BOOL bExtended = TRUE);

Parametry

bExtended
Určuje, zda pole se seznamem má používat rozšířené uživatelské rozhraní nebo výchozí uživatelské rozhraní. Hodnota výběru rozšířeného TRUE uživatelského rozhraní; hodnota výběru standardního FALSE uživatelského rozhraní.

Návratová hodnota

CB_OKAY pokud je operace úspěšná nebo CB_ERR pokud dojde k chybě.

Poznámky

Rozšířené uživatelské rozhraní lze identifikovat následujícími způsoby:

  • Kliknutím na statický ovládací prvek zobrazíte seznam pouze pro pole se seznamem se stylem CBS_DROPDOWNLIST .

  • Stisknutím klávesy ŠIPKA DOLŮ se zobrazí seznam (klávesa F4 je zakázaná).

Posouvání ve statickém ovládacím prvku je zakázané, když seznam položek není viditelný (šipkové klávesy jsou zakázané).

Příklad

Podívejte se na příklad pro CComboBox::GetExtendedUI.

CComboBox::SetHorizontalExtent

Nastaví šířku v pixelech, podle kterých lze vodorovně posunout část pole se seznamem.

void SetHorizontalExtent(UINT nExtent);

Parametry

nExtent
Určuje početpixelůch

Poznámky

Pokud je šířka seznamu menší než tato hodnota, vodorovný posuvník vodorovně posune položky v seznamu. Pokud je šířka seznamu rovna nebo větší než tato hodnota, vodorovný posuvník je skrytý nebo pokud má pole se seznamem CBS_DISABLENOSCROLL styl zakázané.

Příklad

// 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

Nastaví 32bitovou hodnotu přidruženou k zadané položce v poli se seznamem.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

Parametry

nIndex
Obsahuje index založený na nule položky, která se má nastavit.

dwItemData
Obsahuje novou hodnotu, kterou chcete přidružit k položce.

Návratová hodnota

CB_ERR pokud dojde k chybě.

Poznámky

SetItemDataPtr Pokud má být 32bitová položka ukazatelem, použijte členovou funkci.

Příklad

// 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

Nastaví 32bitovou hodnotu přidruženou k zadané položce v poli se seznamem na zadaný ukazatel (void *).

int SetItemDataPtr(
    int nIndex,
    void* pData);

Parametry

nIndex
Obsahuje index založený na nule k položce.

pData
Obsahuje ukazatel, který chcete přidružit k položce.

Návratová hodnota

CB_ERR pokud dojde k chybě.

Poznámky

Tento ukazatel zůstane platný pro životnost pole se seznamem, i když se relativní pozice položky v poli se seznamem může změnit při přidání nebo odebrání položek. Index položky v poli se proto může změnit, ale ukazatel zůstává spolehlivý.

Příklad

// 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

Voláním SetItemHeight členské funkce nastavíte výšku položek seznamu v poli se seznamem nebo výšku části ovládacího prvku pro úpravy (nebo statický text) pole se seznamem.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

Parametry

nIndex
Určuje, zda je nastavena výška položek seznamu nebo výška části ovládacího prvku pro úpravy (nebo statický text) pole se seznamem.

Pokud má pole se seznamem CBS_OWNERDRAWVARIABLE styl, nIndex určuje index položky seznamu, jehož výška je nastavená na nulu. Jinak nIndex musí být nastavena výška 0 a výška všech položek seznamu bude nastavena.

Pokud nIndex je hodnota -1, nastaví se výška ovládacího prvku pro úpravy nebo statického textu pole se seznamem.

cyItemHeight
Určuje výšku komponenty se seznamem v pixelech identifikovaných parametrem nIndex.

Návratová hodnota

CB_ERR pokud je index nebo výška neplatná; jinak 0.

Poznámky

Výška části ovládacího prvku pro úpravy (nebo statický text) pole se seznamem je nastavená nezávisle na výšce položek seznamu. Aplikace musí zajistit, aby výška části ovládacího prvku pro úpravy (nebo statický text) nebyla menší než výška konkrétní položky seznamu.

Příklad

// 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

Nastaví identifikátor národního prostředí pro toto pole se seznamem.

LCID SetLocale(LCID nNewLocale);

Parametry

nNewLocale
Nová hodnota identifikátoru národního prostředí (LCID) nastavená pro pole se seznamem.

Návratová hodnota

Hodnota předchozího identifikátoru národního prostředí (LCID) pro toto pole se seznamem.

Poznámky

Pokud SetLocale není volána, výchozí národní prostředí se získá ze systému. Toto výchozí národní prostředí systému lze upravit pomocí místní (nebo mezinárodní) aplikace Ovládací panely.

Příklad

// 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

Nastaví minimální počet viditelných položek v rozevíracím seznamu aktuálního ovládacího prvku pole se seznamem.

BOOL SetMinVisibleItems(int iMinVisible);

Parametry

iMinVisible
[v] Určuje minimální počet viditelných položek.

Návratová hodnota

TRUEpokud je tato metoda úspěšná; v opačném případě . FALSE

Poznámky

Tato metoda odešle CB_SETMINVISIBLE zprávu popsanou v sadě Windows SDK.

Příklad

První příklad kódu definuje proměnnou , m_comboboxkterá se používá pro programový přístup k ovládacímu prvku pole se seznamem. Tato proměnná se používá v dalším příkladu.

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

Další příklad kódu vloží 20 položek do rozevíracího seznamu ovládacího prvku pole se seznamem. Potom určuje, že se zobrazí minimálně 10 položek, když uživatel stiskne šipku rozevíracího seznamu.

// 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

Zajišťuje, že je určitá položka viditelná v části seznamu pole se seznamem.

int SetTopIndex(int nIndex);

Parametry

nIndex
Určuje index založený na nule položky seznamu.

Návratová hodnota

Nula v případě úspěchu nebo CB_ERR pokud dojde k chybě.

Poznámky

Systém posune seznam, dokud se v horní části seznamu nezobrazí položka určená uživatelem nIndex nebo dosažení maximálního rozsahu posouvání.

Příklad

// Set the first visible item in the combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);

CComboBox::ShowDropDown

Zobrazí nebo skryje seznam pole se seznamem, které má CBS_DROPDOWN styl nebo CBS_DROPDOWNLIST styl.

void ShowDropDown(BOOL bShowIt = TRUE);

Parametry

bShowIt
Určuje, jestli se má rozevírací seznam zobrazit nebo skrýt. Hodnota TRUE se seznamem. Hodnota FALSE skryje seznam.

Poznámky

Ve výchozím nastavení se zobrazí pole se seznamem tohoto stylu.

Tato členová funkce nemá žádný vliv na pole se seznamem vytvořené pomocí CBS_SIMPLE stylu.

Příklad

Podívejte se na příklad pro CComboBox::GetDroppedState.

Viz také

MFC – ukázkové CTRLBARS
CWnd Třída
Graf hierarchie
CWnd Třída
CButton Třída
CEdit Třída
CListBox Třída
CScrollBar Třída
CStatic Třída
CDialog Třída