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é), CDialog
př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 stylemCBS_SIMPLE
. U pole se seznamem s motivemCBS_DROPDOWN
neboCBS_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 motivemCBS_DROPDOWN
neboCBS_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 seznamemCBS_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 seznamemCBS_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ředCBN_CLOSEUP
oznámením, aby bylo možné označit, že má být výběr uživatele ignorován. ZprávaCBN_SELENDCANCEL
sCBN_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 stylemCBS_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ávouCBN_CLOSEUP
, která značí, že má být výběr uživatele považován za platný. ZprávaCBN_SELENDCANCEL
sCBN_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 stylemCBS_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ímGetLBText
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 CListBox
a 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
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_NCCREATE
pole se seznamem , WM_NCCALCSIZE
WM_CREATE
, a WM_GETMINMAXINFO
zprávy.
Tyto zprávy jsou zpracovávány ve výchozím nastavení OnNcCreate
pomocí , OnCreate
, OnNcCalcSize
a 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ždyWS_VISIBLE
ObvykleWS_DISABLED
ZřídkaWS_VSCROLL
Přidání svislého posouvání seznamu do pole se seznamemWS_HSCROLL
Přidání vodorovného posouvání seznamu do pole se seznamemWS_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ímlpszWildCard
adresáře.DDL_ARCHIVE
Soubor byl archivován.DDL_DRIVES
Zahrňte všechny jednotky, které odpovídají názvu určenému uživatelemlpszWildCard
.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 lpszFind
poli 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_ERRSPACE
to 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 CComboBox
sadě .
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é AddString
InsertString
funkce 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
TRUE
pokud 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_combobox
která 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 CComboBox
má CBS_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
TRUE
pokud 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_combobox
která 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