Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poskytuje funkce pole se seznamem Windows.
Syntax
class CComboBox : public CWnd
Members
Public Constructors
| Name | Description |
|---|---|
CComboBox::CComboBox |
CComboBox Vytvoří objekt. |
Public Methods
| Name | Description |
|---|---|
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. |
Remarks
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.
| Style | Kdy je seznam viditelný | Statický nebo upravit ovládací prvek |
|---|---|---|
| Simple | Always | Edit |
| Drop-down | Při vyřazení | Edit |
| Drop-down list | Při vyřazení | Static |
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_SIMPLEstyl.ON_CBN_DBLCLKUž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 stylemCBS_SIMPLE. U pole se seznamem s motivemCBS_DROPDOWNneboCBS_DROPDOWNLISTstylem nelze poklikáním dojít, protože jedno kliknutí skryje seznam.ON_CBN_DROPDOWNSeznam 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 motivemCBS_DROPDOWNneboCBS_DROPDOWNLISTstylem.ON_CBN_EDITCHANGEUživatel provedl akci, která mohla změnit text v části ovládacího prvku pro úpravy pole se seznamem.CBN_EDITUPDATENa rozdíl od zprávy se tato zpráva odešle po aktualizaci obrazovky windows. Pokud pole se seznamemCBS_DROPDOWNLISTobsahuje 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 seznamemCBS_DROPDOWNLISTobsahuje styl, neodesílají se.ON_CBN_ERRSPACEPole 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ředCBN_CLOSEUPoznámením, aby bylo možné označit, že má být výběr uživatele ignorován. ZprávaCBN_SELENDCANCELsCBN_SELENDOKozná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 stylemCBS_SIMPLE).ON_CBN_SELENDOKUž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ávouCBN_CLOSEUP, která značí, že má být výběr uživatele považován za platný. ZprávaCBN_SELENDCANCELsCBN_SELENDOKozná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 stylemCBS_SIMPLE).ON_CBN_KILLFOCUSPole se seznamem ztrácí vstupní fokus.ON_CBN_SELCHANGEVý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ímGetLBTextnebo jiné podobné funkce.GetWindowTextnelze použít.ON_CBN_SETFOCUSPole 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.
Inheritance Hierarchy
CComboBox
Requirements
Header:afxwin.h
CComboBox::AddString
Přidá řetězec do seznamu pole se seznamem.
int AddString(LPCTSTR lpszString);
Parameters
lpszString
Odkazuje na řetězec ukončený hodnotou null, který se má přidat.
Return Value
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.
Remarks
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í.
Note
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.
Example
// 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();
Example
// 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();
Remarks
Pokud chcete odstranit aktuální výběr a umístit odstraněný obsah do schránky, použijte členovou Cut funkci.
Example
// 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);
Parameters
lpCompareItemStruct
Dlouhý ukazatel na COMPAREITEMSTRUCT strukturu.
Return Value
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:
| Value | Meaning |
|---|---|
| - 1 | Položka 1 seřadí před položkou 2. |
| 0 | Položka 1 a položka 2 seřadí stejně. |
| 1 | Položka 1 seřadí po položce 2. |
Podívejte CWnd::OnCompareItem se na popis .COMPAREITEMSTRUCT
Remarks
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.
Example
// 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();
Example
// 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);
Parameters
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.
Return Value
Nenulové, pokud je úspěšné; jinak 0.
Remarks
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_CREATEWM_NCCALCSIZE, 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_CHILDVždyWS_VISIBLEObvykleWS_DISABLEDZřídkaWS_VSCROLLPřidání svislého posouvání seznamu do pole se seznamemWS_HSCROLLPřidání vodorovného posouvání seznamu do pole se seznamemWS_GROUPSeskupení ovládacích prvkůWS_TABSTOPZahrnutí pole se seznamem do pořadí ovládacích prvků
Example
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();
Remarks
Pokud chcete odstranit aktuální výběr bez umístění odstraněného textu do schránky, zavolejte členovou Clear funkci.
Example
// 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);
Parameters
lpDeleteItemStruct
Dlouhý ukazatel na strukturu Systému Windows DELETEITEMSTRUCT , která obsahuje informace o odstraněné položce. Popis CWnd::OnDeleteItem této struktury najdete.
Remarks
Výchozí implementace této funkce nic nedělá. Přepište tuto funkci tak, aby podle potřeby překreslila pole se seznamem.
Example
// 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);
Parameters
nIndex
Určuje index řetězce, který se má odstranit.
Return Value
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.
Remarks
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.
Example
// 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);
Parameters
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_READWRITESoubor lze číst nebo zapisovat do.DDL_READONLYSoubor lze číst, ale ne zapisovat do.DDL_HIDDENSoubor je skrytý a nezobrazuje se ve výpisu adresáře.DDL_SYSTEMSoubor je systémový soubor.DDL_DIRECTORYNázev určený zadánímlpszWildCardadresáře.DDL_ARCHIVESoubor byl archivován.DDL_DRIVESZahrňte všechny jednotky, které odpovídají názvu určenému uživatelemlpszWildCard.DDL_EXCLUSIVEVý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 *.*).
Return Value
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ů.
Remarks
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.
Example
// 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);
Parameters
lpDrawItemStruct
Ukazatel na DRAWITEMSTRUCT strukturu, která obsahuje informace o typu požadovaného výkresu.
Remarks
Člen itemActionDRAWITEMSTRUCT 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.
Example
// 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;
Parameters
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.
Return Value
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é.
Remarks
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.
Example
// 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;
Parameters
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.
Return Value
Index odpovídající položky založený na nule nebo CB_ERR pokud hledání nebylo úspěšné.
Remarks
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.
Example
// 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;
Parameters
pcbi
Ukazatel na COMBOBOXINFO strukturu.
Return Value
Vrátí TRUE úspěch FALSE při selhání.
Remarks
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;
Return Value
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ě.
Example
// 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;
Parameters
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.
Return Value
V prvním přetížení objekt CString obsahující text banneru cue, pokud existuje; jinak objekt, CString který má nulovou délku.
-or-
V druhém přetížení, TRUE pokud je tato metoda úspěšná; jinak , FALSE.
Remarks
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;
Return Value
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.
Remarks
GetCurSel vrátí index do seznamu.
Example
// 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;
Parameters
lprect
Odkazuje na strukturu RECT, která má přijímat souřadnice.
Example
// 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;
Return Value
Nenulové, pokud je seznam viditelný; jinak 0.
Example
// 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;
Return Value
V případě úspěchu je minimální povolená šířka v pixelech; v opačném případě . CB_ERR
Remarks
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.
Example
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;
Return Value
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.
Example
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;
Return Value
Nenulové, pokud pole se seznamem obsahuje rozšířené uživatelské rozhraní; jinak 0.
Remarks
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).
Example
// 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;
Return Value
Posunutí šířky části pole se seznamem v pixelech
Remarks
To platí jenom v případě, že část pole se seznamem obsahuje vodorovný posuvník.
Example
// 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;
Parameters
nIndex
Obsahuje index položky založené na nule v seznamu pole se seznamem.
Return Value
32bitová hodnota přidružená k položce nebo CB_ERR pokud dojde k chybě.
Remarks
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*).
Example
// 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;
Parameters
nIndex
Obsahuje index položky založené na nule v seznamu pole se seznamem.
Return Value
Načte ukazatel nebo -1, pokud dojde k chybě.
Example
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;
Parameters
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.
Return Value
Výška zadané položky v poli se seznamem v pixelech. Vrácená hodnota je CB_ERR v případě, že dojde k chybě.
Example
// 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;
Parameters
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
Return Value
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.
Remarks
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).
Example
// 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;
Parameters
nIndex
Obsahuje index založený na nule řetězce seznamu.
Return Value
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.
Example
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;
Return Value
Hodnota identifikátoru národního prostředí (LCID) pro řetězce v poli se seznamem.
Remarks
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.
Example
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;
Return Value
Minimální počet viditelných položek v aktuálním rozevíracím seznamu
Remarks
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;
Return Value
Index založený na nule první viditelné položky v části seznamu pole se seznamem v případě úspěchu, CB_ERR jinak.
Remarks
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.
Example
// 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);
Parameters
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.
Return Value
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.
Remarks
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.
Example
// 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);
Parameters
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.
Return Value
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.
Remarks
AddString Na rozdíl od členské funkce nezpůsobí členová funkce InsertString řazení seznamu se stylemCBS_SORT.
Note
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.
Example
// 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);
Parameters
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ů.
Return Value
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.
Remarks
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.
Example
// 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);
Parameters
lpMeasureItemStruct
Dlouhý ukazatel na MEASUREITEMSTRUCT strukturu.
Remarks
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.
Example
// 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();
Remarks
Data se vloží jenom v případě, že schránka obsahuje data ve CF_TEXT formátu.
Example
// 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();
Example
// 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);
Parameters
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.
Return Value
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í.
Remarks
Ř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 SelectStringFindString obě členské funkce najdou řetězec, ale SelectString členová funkce také vybere řetězec.
Example
// 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);
Parameters
lpszText
[v] Ukazatel na vyrovnávací paměť s ukončenou hodnotou null, která obsahuje text upozornění.
Return Value
TRUEpokud je metoda úspěšná; v opačném případě . FALSE
Remarks
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.
Example
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);
Parameters
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ší.
Return Value
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.
Remarks
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.
Example
// 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);
Parameters
nWidth
Minimální povolená šířka části seznamu pole se seznamem v pixelech.
Return Value
V případě úspěchu je nová šířka seznamu, jinak CB_ERR.
Remarks
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.
Example
// 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);
Parameters
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.
Return Value
Nenulové, pokud je členová funkce úspěšná; jinak 0. Je CB_ERR to, pokud CComboBox má CBS_DROPDOWNLIST styl nebo nemá seznam.
Remarks
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.
Note
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.
Example
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);
Parameters
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í.
Return Value
CB_OKAY pokud je operace úspěšná nebo CB_ERR pokud dojde k chybě.
Remarks
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é).
Example
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);
Parameters
nExtent
Určuje početpixelůch
Remarks
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é.
Example
// 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);
Parameters
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.
Return Value
CB_ERR pokud dojde k chybě.
Remarks
SetItemDataPtr Pokud má být 32bitová položka ukazatelem, použijte členovou funkci.
Example
// 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);
Parameters
nIndex
Obsahuje index založený na nule k položce.
pData
Obsahuje ukazatel, který chcete přidružit k položce.
Return Value
CB_ERR pokud dojde k chybě.
Remarks
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ý.
Example
// 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);
Parameters
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.
Return Value
CB_ERR pokud je index nebo výška neplatná; jinak 0.
Remarks
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.
Example
// 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);
Parameters
nNewLocale
Nová hodnota identifikátoru národního prostředí (LCID) nastavená pro pole se seznamem.
Return Value
Hodnota předchozího identifikátoru národního prostředí (LCID) pro toto pole se seznamem.
Remarks
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.
Example
// 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);
Parameters
iMinVisible
[v] Určuje minimální počet viditelných položek.
Return Value
TRUEpokud je tato metoda úspěšná; v opačném případě . FALSE
Remarks
Tato metoda odešle CB_SETMINVISIBLE zprávu popsanou v sadě Windows SDK.
Example
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);
Parameters
nIndex
Určuje index založený na nule položky seznamu.
Return Value
Nula v případě úspěchu nebo CB_ERR pokud dojde k chybě.
Remarks
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í.
Example
// 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);
Parameters
bShowIt
Určuje, jestli se má rozevírací seznam zobrazit nebo skrýt. Hodnota TRUE se seznamem. Hodnota FALSE skryje seznam.
Remarks
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.
Example
Podívejte se na příklad pro CComboBox::GetDroppedState.
See also
MFC – ukázkové CTRLBARS
CWnd Třída
Hierarchy Chart
CWnd Třída
CButton Třída
CEdit Třída
CListBox Třída
CScrollBar Třída
CStatic Třída
CDialog Třída