CListBox
Třída
Poskytuje funkce seznamu Windows.
Syntaxe
class CListBox : public CWnd
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CListBox::CListBox |
CListBox Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CListBox::AddString |
Přidá řetězec do seznamu. |
CListBox::CharToItem |
Přepsáním zajistíte vlastní WM_CHAR zpracování pro seznamy pro kreslení vlastníka, která nemají řetězce. |
CListBox::CompareItem |
Volané architekturou k určení pozice nové položky v seřazené seznam vlastník-draw seznam. |
CListBox::Create |
Vytvoří seznam Windows a připojí ho k objektu CListBox . |
CListBox::DeleteItem |
Volá se podle architektury, když uživatel odstraní položku ze seznamu vlastník-draw. |
CListBox::DeleteString |
Odstraní řetězec ze seznamu. |
CListBox::Dir |
Přidá názvy souborů, jednotky nebo obojí z aktuálního adresáře do seznamu. |
CListBox::DrawItem |
Volá se podle architektury, když se změní vizuální aspekt seznamu pro kreslení vlastníka. |
CListBox::FindString |
Vyhledá řetězec v seznamu. |
CListBox::FindStringExact |
Najde první řetězec seznamu, který odpovídá zadanému řetězci. |
CListBox::GetAnchorIndex |
Načte index založený na nule aktuální položky ukotvení v seznamu. |
CListBox::GetCaretIndex |
Určuje index položky, která má obdélník fokusu v seznamu s vícenásobným výběrem. |
CListBox::GetCount |
Vrátí počet řetězců v seznamu. |
CListBox::GetCurSel |
Vrátí index založený na nule aktuálně vybraného řetězce v seznamu. |
CListBox::GetHorizontalExtent |
Vrátí šířku v pixelech, kterou lze vodorovně posunout v seznamu. |
CListBox::GetItemData |
Vrátí hodnotu přidruženou k položce seznamu. |
CListBox::GetItemDataPtr |
Vrátí ukazatel na položku seznamu. |
CListBox::GetItemHeight |
Určuje výšku položek v seznamu. |
CListBox::GetItemRect |
Vrátí ohraničující obdélník položky seznamu, protože je aktuálně zobrazen. |
CListBox::GetListBoxInfo |
Načte počet položek na sloupec. |
CListBox::GetLocale |
Načte identifikátor národního prostředí pro seznam. |
CListBox::GetSel |
Vrátí stav výběru položky seznamu. |
CListBox::GetSelCount |
Vrátí počet řetězců aktuálně vybraných v seznamu s vícenásobným výběrem. |
CListBox::GetSelItems |
Vrátí indexy řetězců aktuálně vybraných v seznamu. |
CListBox::GetText |
Zkopíruje položku seznamu do vyrovnávací paměti. |
CListBox::GetTextLen |
Vrátí délku v bajtech položky seznamu. |
CListBox::GetTopIndex |
Vrátí index prvního viditelného řetězce v seznamu. |
CListBox::InitStorage |
Předlokuje bloky paměti pro položky seznamu a řetězce. |
CListBox::InsertString |
Vloží řetězec do určitého umístění v seznamu. |
CListBox::ItemFromPoint |
Vrátí index položky seznamu nejbližšího bodu. |
CListBox::MeasureItem |
Volá se rozhraním, když je vytvořen seznam vlastník-draw seznam k určení dimenzí seznamu. |
CListBox::ResetContent |
Vymaže všechny položky ze seznamu. |
CListBox::SelectString |
Vyhledá a vybere řetězec v seznamu s jedním výběrem. |
CListBox::SelItemRange |
Vybere nebo zruší výběr rozsahu řetězců v seznamu s vícenásobným výběrem. |
CListBox::SetAnchorIndex |
Nastaví ukotvení v seznamu s vícenásobným výběrem a zahájí rozšířený výběr. |
CListBox::SetCaretIndex |
Nastaví obdélník fokusu na položku v zadaném indexu v seznamu s vícenásobným výběrem. |
CListBox::SetColumnWidth |
Nastaví šířku sloupce vícesloupcového seznamu. |
CListBox::SetCurSel |
Vybere řetězec seznamu. |
CListBox::SetHorizontalExtent |
Nastaví šířku v pixelech, které lze vodorovně posunout v seznamu. |
CListBox::SetItemData |
Nastaví hodnotu přidruženou k položce seznamu. |
CListBox::SetItemDataPtr |
Nastaví ukazatel na položku seznamu. |
CListBox::SetItemHeight |
Nastaví výšku položek v seznamu. |
CListBox::SetLocale |
Nastaví identifikátor národního prostředí pro seznam. |
CListBox::SetSel |
Vybere nebo zruší výběr položky seznamu v seznamu s vícenásobným výběrem. |
CListBox::SetTabStops |
Nastaví pozice zarážky tabulátoru v seznamu. |
CListBox::SetTopIndex |
Nastaví index založený na nule prvního viditelného řetězce v seznamu. |
CListBox::VKeyToItem |
Přepsáním zajistíte vlastní WM_KEYDOWN zpracování pro seznamy se LBS_WANTKEYBOARDINPUT sadou stylů. |
Poznámky
V seznamu se zobrazí seznam položek, například názvy souborů, které může uživatel zobrazit a vybrat.
V seznamu s jedním výběrem může uživatel vybrat jenom jednu položku. V seznamu s vícenásobným výběrem lze vybrat rozsah položek. Když uživatel vybere položku, zvýrazní se a v seznamu se odešle zpráva s oznámením do nadřazeného okna.
Seznam můžete vytvořit buď ze šablony dialogového okna, nebo přímo v kódu. Pokud ho chcete vytvořit přímo, vytvořte CListBox
objekt a potom zavolejte Create
členovou funkci, aby se vytvořil ovládací prvek seznam systému Windows a připojil ho k objektu CListBox
. Chcete-li použít seznam v šabloně dialogového okna, deklarujte proměnnou seznamu ve třídě dialogového okna a potom použijte DDX_Control
funkci třídy DoDataExchange
dialogového okna pro připojení členské proměnné k ovládacímu prvku. (To se provádí automaticky, když do třídy dialogového okna přidáte řídicí proměnnou.)
Konstrukce může být jednokrokový proces ve třídě odvozené od CListBox
. Napište konstruktor pro odvozenou třídu a volání Create
z konstruktoru.
Pokud chcete zpracovávat zprávy oznámení systému Windows odeslané seznamem do nadřazeného seznamu (obvykle třídy odvozené z CDialog
), přidejte pro každou zprávu položku mapování zpráv a členovou funkci obslužné rutiny zpráv.
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 seznam 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( );
Následuje seznam potenciálních položek mapy zpráv a popis případů, ve kterých by byly odeslány nadřazené:
ON_LBN_DBLCLK
Uživatel dvakrát klikne na řetězec v seznamu. Tuto zprávu s oznámením odešle pouze seznam seLBS_NOTIFY
stylem.ON_LBN_ERRSPACE
Seznam nemůže přidělit dostatek paměti pro splnění požadavku.ON_LBN_KILLFOCUS
Pole se seznamem ztrácí vstupní fokus.ON_LBN_SELCANCEL
Aktuální výběr seznamu je zrušen. Tato zpráva se odešle jenom v případě, že máLBS_NOTIFY
seznam styl.ON_LBN_SELCHANGE
Výběr v seznamu se změnil. Toto oznámení se neodesílají, pokud je výběr změněn členkouCListBox::SetCurSel
funkce. Toto oznámení platí jenom pro seznam, který máLBS_NOTIFY
styl. ZprávaLBN_SELCHANGE
s oznámením se odešle pro seznam s vícenásobným výběrem pokaždé, když uživatel stiskne klávesu se šipkou, i když se výběr nezmění.ON_LBN_SETFOCUS
Seznam přijímá vstupní fokus.ON_WM_CHARTOITEM
Seznam pro kreslení vlastníka, který neobsahujeWM_CHAR
žádné řetězce, neobdrží zprávu.ON_WM_VKEYTOITEM
Seznam seLBS_WANTKEYBOARDINPUT
stylemWM_KEYDOWN
obdrží zprávu.
Pokud vytvoříte CListBox
objekt v dialogovém okně (prostřednictvím prostředku dialogového okna), CListBox
objekt se po zavření dialogového okna automaticky zničí.
Pokud vytvoříte CListBox
objekt v okně, možná budete muset objekt zničit CListBox
. Pokud vytvoříte CListBox
objekt v zásobníku, automaticky se zničí. Pokud vytvoříte CListBox
objekt v haldě new
pomocí funkce, musíte volat delete
objekt, aby ho zničil, když uživatel zavře nadřazené okno.
Pokud přidělíte jakoukoli paměť v objektu CListBox
, přepište CListBox
destruktoru tak, aby se přidělení vyřazuje.
Hierarchie dědičnosti
CListBox
Požadavky
Záhlaví: afxwin.h
CListBox::AddString
Přidá řetězec do seznamu.
int AddString(LPCTSTR lpszItem);
Parametry
lpszItem
Odkazuje na řetězec ukončený hodnotou null, který se má přidat.
Návratová hodnota
Index založený na nule na řetězec v seznamu. Vrácená hodnota je LB_ERR
, pokud dojde k chybě. Vrácená hodnota je LB_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 LBS_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í. Pokud byl seznam vytvořen se stylem LBS_SORT
, ale ne LBS_HASSTRINGS
stylem, architektura seznam seřadí jedním nebo více voláními CompareItem
členské funkce.
Slouží InsertString
k vložení řetězce do konkrétního umístění v seznamu.
Příklad
// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
str.Format(_T("item string %d"), i);
m_myListBox.AddString(str);
}
CListBox::CharToItem
Volá se rozhraním, když nadřazené okno seznamu obdrží WM_CHARTOITEM
zprávu ze seznamu.
virtual int CharToItem(
UINT nKey,
UINT nIndex);
Parametry
nKey
Kód ANSI znaku, který uživatel zadal.
nIndex
Aktuální pozice kurzoru seznamu.
Návratová hodnota
Vrátí hodnotu - 1 nebo - 2 pro žádnou další akci nebo nenegativní číslo k určení indexu položky seznamu, na které se má provést výchozí akce pro stisknutí kláves. Výchozí implementace vrátí hodnotu - 1.
Poznámky
Zpráva WM_CHARTOITEM
se odešle seznamem, když obdrží WM_CHAR
zprávu, ale pouze v případě, že seznam splňuje všechna tato kritéria:
Je seznam pro kreslení vlastníkem.
LBS_HASSTRINGS
Nemá sadu stylů.Obsahuje aspoň jednu položku.
Tuto funkci byste nikdy neměli volat sami. Přepište tuto funkci tak, aby poskytovala vlastní zpracování zpráv klávesnice.
V přepsání musíte vrátit hodnotu, která architektuře řekne, jakou akci jste provedli. Návratová hodnota - 1 nebo - 2 označuje, že jste zpracovali všechny aspekty výběru položky a nevyžaduje žádnou další akci v seznamu. Před vrácením 1 nebo - 2 můžete nastavit výběr nebo přesunout kurzor nebo obojí. Chcete-li nastavit výběr, použijte SetCurSel
nebo SetSel
. Chcete-li přesunout stříšku, použijte SetCaretIndex
.
Návratová hodnota 0 nebo vyšší určuje index položky v seznamu a označuje, že seznam by měl provést výchozí akci pro stisknutí klávesy u dané položky.
Příklad
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic key. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CharToItem(UINT nChar, UINT nIndex)
{
// On a numeric key, move the caret up one item.
if (isdigit(nChar) && (nIndex > 0))
{
SetCaretIndex(nIndex - 1);
}
// On an alphabetic key, move the caret down one item.
else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex + 1);
}
// Do not perform any default processing.
return -1;
}
CListBox::CListBox
CListBox
Vytvoří objekt.
CListBox();
Poznámky
Objekt vytvoříte CListBox
ve dvou krocích. Nejprve zavolejte konstruktor ClistBox
a potom volání Create
, který inicializuje seznam Windows a připojí jej k CListBox
.
Příklad
// Declare a local CListBox object.
CListBox myListBox;
// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;
CListBox::CompareItem
Volané architekturou k určení relativní pozice nové položky v seřazeného seznamu vlastník-kreslení.
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 se jednat o některou 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
struktury.
Poznámky
Ve výchozím nastavení tato členová funkce nic nedělá. Pokud vytvoříte seznam pro kreslení vlastníka se stylem LBS_SORT
, musíte tuto členovou funkci přepsat, aby pomohla rozhraní při řazení nových položek přidaných do seznamu.
Příklad
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example compares two items using _tcscmp to sort items in reverse
// alphabetical order. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
ASSERT(lpCompareItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
ASSERT(lpszText1 != NULL);
LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
ASSERT(lpszText2 != NULL);
return _tcscmp(lpszText2, lpszText1);
}
CListBox::Create
Vytvoří seznam Windows a připojí ho k objektu CListBox
.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parametry
dwStyle
Určuje styl seznamu. U tohoto pole použijte libovolnou kombinaci stylů seznamu.
rect
Určuje velikost a umístění seznamu. Může to být CRect
objekt nebo RECT
struktura.
pParentWnd
Určuje nadřazené okno seznamu (obvykle CDialog
objekt). Nesmí to být NULL
.
nID
Určuje ID ovládacího prvku seznamu.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
Objekt vytvoříte CListBox
ve dvou krocích. Nejprve zavolejte konstruktor a potom volání Create
, který inicializuje seznam Windows a připojí ho k objektu CListBox
.
Při Create
spuštění systém Windows odešle ovládacímu WM_NCCREATE
prvku seznam , 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 CListBox
, 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 seznam použijte následující styly oken.
WS_CHILD
VždyWS_VISIBLE
ObvykleWS_DISABLED
ZřídkaWS_VSCROLL
Přidání svislého posuvníkuWS_HSCROLL
Přidání vodorovného posuvníkuWS_GROUP
Seskupení ovládacích prvkůWS_TABSTOP
Povolení tabbingu na tento ovládací prvek
Příklad
// pParentWnd is a pointer to the parent window.
m_myListBox.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_HSCROLL,
CRect(10, 10, 200, 200), pParentWnd, IDC_MYLISTBOX);
CListBox::DeleteItem
Volá se rozhraním, když uživatel odstraní položku z objektu pro kreslení CListBox
vlastníka nebo zničí seznam.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Parametry
lpDeleteItemStruct
Dlouhý ukazatel na strukturu Systému Windows DELETEITEMSTRUCT
, která obsahuje informace o odstraněné položce.
Poznámky
Výchozí implementace této funkce nic nedělá. Přepsat tuto funkci tak, aby podle potřeby překreslila seznam vlastník-draw.
Podívejte CWnd::OnDeleteItem
se na popis DELETEITEMSTRUCT
struktury.
Příklad
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example simply frees the item's text. The list box control was created
// with the following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
ASSERT(lpDeleteItemStruct->CtlType == ODT_LISTBOX);
LPVOID lpszText = (LPVOID)lpDeleteItemStruct->itemData;
ASSERT(lpszText != NULL);
free(lpszText);
CListBox::DeleteItem(lpDeleteItemStruct);
}
CListBox::DeleteString
Odstraní položku na pozici nIndex
ze seznamu.
int DeleteString(UINT nIndex);
Parametry
nIndex
Určuje index řetězce založený na nule, který se má odstranit.
Návratová hodnota
Počet zbývajících řetězců v seznamu. Vrácená hodnota je LB_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 seznam 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 other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.DeleteString(i);
}
CListBox::Dir
Přidá do seznamu seznam názvů souborů, jednotek nebo obojího.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Parametry
attr
Může se jednat o libovolnou kombinaci hodnot popsaných enum
v CFile::GetStatus
, nebo libovolnou kombinaci následujících hodnot:
Hodnota | Význam |
---|---|
0x0000 | Soubor lze číst nebo zapisovat do. |
0x0001 | Soubor lze číst, ale ne zapisovat do. |
0x0002 | Soubor je skrytý a nezobrazuje se ve výpisu adresáře. |
0x0004 | Soubor je systémový soubor. |
0x0010 | Název určený zadáním lpszWildCard adresáře. |
0x0020 | Soubor byl archivován. |
0x4000 | Zahrňte všechny jednotky, které odpovídají názvu určenému uživatelem lpszWildCard . |
0x8000 | 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
Index založený na nule posledního názvu souboru přidaného do seznamu. Vrácená hodnota je LB_ERR
v případě, že dojde k chybě. Vrácená hodnota je LB_ERRSPACE
v případě, že není k dispozici dostatek místa pro uložení nových řetězců.
Příklad
// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
::GetWindowsDirectory(lpszWinPath, MAX_PATH);
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);
m_myListBox.ResetContent();
m_myListBox.Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));
::SetCurrentDirectory(lpszOldPath);
CListBox::DrawItem
Volá se podle architektury, když se změní vizuální aspekt seznamu pro kreslení vlastníka.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parametry
lpDrawItemStruct
Dlouhý ukazatel na DRAWITEMSTRUCT
strukturu, která obsahuje informace o typu požadovaného výkresu.
Poznámky
itemState
Členové itemAction
struktury definují akci výkresuDRAWITEMSTRUCT
, která se má provést.
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í CListBox
vlastníka. Aplikace by měla obnovit všechny objekty rozhraní grafického zařízení (GDI) vybrané pro kontext zobrazení zadaný před lpDrawItemStruct
ukončením této členské funkce.
Podívejte CWnd::OnDrawItem
se na popis DRAWITEMSTRUCT
struktury.
Příklad
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example draws an item's text centered vertically and horizontally. The
// list box control was created with the following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Also, erase
// rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem,
::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// If this item has the focus, draw a red frame around the
// item's rect.
if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
(lpDrawItemStruct->itemState & ODS_FOCUS))
{
CBrush br(RGB(255, 0, 0));
dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
CListBox::FindString
Vyhledá první řetězec v seznamu obsahujícím zadanou předponu beze změny výběru seznamu.
int FindString(
int nStartAfter,
LPCTSTR lpszItem) 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 nStartAfter
je -1, prohledá se celé pole seznamu od začátku.
lpszItem
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 odpovídající položky založený na nule nebo LB_ERR
pokud hledání nebylo úspěšné.
Poznámky
SelectString
Pomocí členské funkce vyhledejte a vyberte řetězec.
Příklad
// The string to match.
LPCTSTR lpszmyString = _T("item");
// Delete all items that begin with the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindString(nIndex, lpszmyString)) != LB_ERR)
{
m_myListBox.DeleteString(nIndex);
}
CListBox::FindStringExact
Najde první řetězec seznamu, který odpovídá řetězci zadanému v lpszFind
.
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 řetězec může obsahovat libovolnou kombinaci velkých a malých písmen.
Návratová hodnota
Index odpovídající položky nebo LB_ERR
pokud hledání nebylo úspěšné.
Poznámky
Pokud byl seznam vytvořen se stylem kreslení vlastníka, ale bez LBS_HASSTRINGS
stylu, FindStringExact
členské funkce se pokusí shodovat hodnotu dvojitého lpszFind
slova s hodnotou .
Příklad
// The string to match.
LPCTSTR lpszmyString = _T("item string 3");
// Delete all items that exactly match the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindStringExact(nIndex, lpszmyString)) != LB_ERR)
{
m_myListBox.DeleteString(nIndex);
}
CListBox::GetAnchorIndex
Načte index založený na nule aktuální položky ukotvení v seznamu.
int GetAnchorIndex() const;
Návratová hodnota
Index aktuální položky ukotvení, pokud je úspěšný; jinak LB_ERR.
Poznámky
V seznamu s vícenásobným výběrem je položka ukotvení první nebo poslední položkou v bloku souvislých vybraných položek.
Příklad
Podívejte se na příklad pro CListBox::SetAnchorIndex
.
CListBox::GetCaretIndex
Určuje index položky, která má obdélník fokusu v seznamu s vícenásobným výběrem.
int GetCaretIndex() const;
Návratová hodnota
Index položky, která má obdélník fokusu v seznamu, je založený na nule. Pokud je seznam seznamem s jedním výběrem, návratová hodnota je index vybrané položky, pokud existuje.
Poznámky
Položka může nebo nemusí být vybrána.
Příklad
Podívejte se na příklad pro CListBox::SetCaretIndex
.
CListBox::GetCount
Načte počet položek v seznamu.
int GetCount() const;
Návratová hodnota
Počet položek v seznamu nebo LB_ERR
pokud dojde k chybě.
Poznámky
Vrácený počet je větší než hodnota indexu poslední položky (index je založený na nule).
Příklad
// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
str.Format(_T("item %d"), i);
m_myListBox.AddString(str);
}
// Verify that 10 items were added to the list box.
ASSERT(m_myListBox.GetCount() == 10);
CListBox::GetCurSel
Načte index na základě nuly aktuálně vybrané položky( pokud existuje) v seznamu s jedním výběrem.
int GetCurSel() const;
Návratová hodnota
Index aktuálně vybrané položky založený na nule, pokud se jedná o seznam s jedním výběrem. LB_ERR
Pokud není aktuálně vybrána žádná položka.
V seznamu s vícenásobným výběrem je index položky, která má fokus.
Poznámky
Nezavolejte GetCurSel
seznam s vícenásobným výběrem. Místo toho použijte CListBox::GetSelItems
.
Příklad
// Select the next item of the currently selected one.
int nIndex = m_myListBox.GetCurSel();
int nCount = m_myListBox.GetCount();
if ((nIndex != LB_ERR) && (nCount > 1))
{
if (++nIndex < nCount)
m_myListBox.SetCurSel(nIndex);
else
m_myListBox.SetCurSel(0);
}
CListBox::GetHorizontalExtent
Načte ze seznamu šířku v pixelech, o kterou se dá posunout vodorovně.
int GetHorizontalExtent() const;
Návratová hodnota
Posunutí šířky seznamu v pixelech.
Poznámky
To platí jenom v případě, že seznam obsahuje vodorovný posuvník.
Příklad
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
m_myListBox.ReleaseDC(pDC);
// Set the horizontal extent only if the current extent is not large enough.
if (m_myListBox.GetHorizontalExtent() < dx)
{
m_myListBox.SetHorizontalExtent(dx);
ASSERT(m_myListBox.GetHorizontalExtent() == dx);
}
CListBox::GetItemData
Načte zadanou hodnotu dvojitého slova aplikace přidruženou k zadané položce seznamu.
DWORD_PTR GetItemData(int nIndex) const;
Parametry
nIndex
Určuje index položky na základě nuly v seznamu.
Návratová hodnota
Hodnota přidružená k položce nebo LB_ERR
pokud dojde k chybě.
Poznámky
Hodnota doubleword byla dwItemData
parametr volání SetItemData
.
Příklad
// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
if (m_myListBox.GetItemData(i) == 0)
{
m_myListBox.SetItemData(i, (DWORD)-1);
}
}
CListBox::GetItemDataPtr
Načte 32bitovou hodnotu zadanou aplikací přidruženou k zadané položce seznamu jako ukazatel (void
*).
void* GetItemDataPtr(int nIndex) const;
Parametry
nIndex
Určuje index položky na základě nuly v seznamu.
Návratová hodnota
Načte ukazatel nebo -1, pokud dojde k chybě.
Příklad
LPVOID lpmyPtr = pParentWnd;
// Check all the items in the list box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
if (m_myListBox.GetItemDataPtr(i) == lpmyPtr)
{
m_myListBox.SetItemDataPtr(i, NULL);
}
}
CListBox::GetItemHeight
Určuje výšku položek v seznamu.
int GetItemHeight(int nIndex) const;
Parametry
nIndex
Určuje index položky na základě nuly v seznamu. Tento parametr se používá pouze v případě, že má seznam LBS_OWNERDRAWVARIABLE
styl. V opačném případě by měl být nastaven na hodnotu 0.
Návratová hodnota
Výška položek v pixelech v seznamu. Pokud má LBS_OWNERDRAWVARIABLE
seznam styl, návratová hodnota je výška položky určené nIndex
hodnotou . Pokud dojde k chybě, návratová hodnota je LB_ERR
.
Příklad
// Set the height of every item so the item
// is completely visible.
CString str;
CSize sz;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
// Only want to set the item height if the current height
// is not big enough.
if (m_myListBox.GetItemHeight(i) < sz.cy)
m_myListBox.SetItemHeight(i, sz.cy);
}
m_myListBox.ReleaseDC(pDC);
CListBox::GetItemRect
Načte rozměry obdélníku, který ohraničuje položku seznamu, protože je aktuálně zobrazena v okně seznamu.
int GetItemRect(
int nIndex,
LPRECT lpRect) const;
Parametry
nIndex
Určuje index položky založený na nule.
lpRect
Určuje dlouhý ukazatel na RECT
strukturu , která přijímá souřadnice klienta seznamu položky.
Návratová hodnota
LB_ERR
pokud dojde k chybě.
Příklad
// Dump all of the items bounds.
CString str;
RECT r;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetItemRect(i, &r);
str.Format(_T("item %d: left = %d, top = %d, right = %d, ")
_T("bottom = %d\r\n"),
i,
r.left,
r.top,
r.right,
r.bottom);
AFXDUMP(str);
}
CListBox::GetListBoxInfo
Načte počet položek na sloupec.
DWORD GetListBoxInfo() const;
Návratová hodnota
Počet položek na sloupec objektu CListBox
Poznámky
Tato členová funkce emuluje funkce LB_GETLISTBOXINFO
zprávy, jak je popsáno v sadě Windows SDK.
CListBox::GetLocale
Načte národní prostředí používané seznamem.
LCID GetLocale() const;
Návratová hodnota
Hodnota identifikátoru národního prostředí (LCID) pro řetězce v seznamu.
Poznámky
Národní prostředí se používá například k určení pořadí řazení řetězců v seřazeném seznamu.
Příklad
Podívejte se na příklad pro CListBox::SetLocale
.
CListBox::GetSel
Načte stav výběru položky.
int GetSel(int nIndex) const;
Parametry
nIndex
Určuje index položky založený na nule.
Návratová hodnota
Kladné číslo, pokud je vybrána zadaná položka; jinak je to 0. Vrácená hodnota je LB_ERR
v případě, že dojde k chybě.
Poznámky
Tato členová funkce funguje se seznamem s jedním i vícenásobným výběrem.
Chcete-li načíst index aktuálně vybrané položky seznamu, použijte CListBox::GetCurSel
.
Příklad
// Dump all of the items select state.
CString str;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
str.Format(_T("item %d: select state is %s\r\n"),
i,
m_myListBox.GetSel(i) > 0 ? _T("true") : _T("false"));
AFXDUMP(str);
}
CListBox::GetSelCount
Načte celkový počet vybraných položek v seznamu s vícenásobným výběrem.
int GetSelCount() const;
Návratová hodnota
Počet vybraných položek v seznamu Pokud je seznam seznamem seznam s jedním výběrem, návratová hodnota je LB_ERR
.
Příklad
Podívejte se na příklad pro CListBox::GetSelItems
.
CListBox::GetSelItems
Vyplní vyrovnávací paměť polem celých čísel, která určuje čísla položek vybraných položek v seznamu s vícenásobným výběrem.
int GetSelItems(
int nMaxItems,
LPINT rgIndex) const;
Parametry
nMaxItems
Určuje maximální počet vybraných položek, jejichž čísla položek se mají umístit do vyrovnávací paměti.
rgIndex
Určuje ukazatel na vyrovnávací paměť dostatečně velký pro počet celých čísel určených parametrem nMaxItems
.
Návratová hodnota
Skutečný počet položek umístěných ve vyrovnávací paměti. Pokud je seznam seznamem seznam s jedním výběrem, návratová hodnota je LB_ERR
.
Příklad
// Get the indexes of all the selected items.
int nCount = m_myODListBox.GetSelCount();
CArray<int, int> aryListBoxSel;
aryListBoxSel.SetSize(nCount);
m_myODListBox.GetSelItems(nCount, aryListBoxSel.GetData());
// Dump the selection array.
AFXDUMP(aryListBoxSel);
CListBox::GetText
Získá řetězec ze seznamu.
int GetText(
int nIndex,
LPTSTR lpszBuffer) const;
void GetText(
int nIndex,
CString& rString) const;
Parametry
nIndex
Určuje index založený na nule řetězce, který se má načíst.
lpszBuffer
Odkazuje na vyrovnávací paměť, která přijímá řetězec. Vyrovnávací paměť musí mít dostatek místa pro řetězec a ukončující znak null. Velikost řetězce lze předem určit voláním GetTextLen
členské funkce.
rString
Odkaz na CString
objekt.
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 LB_ERR
.
Poznámky
Druhý formulář této členské funkce vyplní CString
objekt textem řetězce.
Příklad
// Dump all of the items in the list box.
CString str, str2;
int n;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
n = m_myListBox.GetTextLen(i);
m_myListBox.GetText(i, str.GetBuffer(n));
str.ReleaseBuffer();
str2.Format(_T("item %d: %s\r\n"), i, str.GetBuffer(0));
AFXDUMP(str2);
}
CListBox::GetTextLen
Získá délku řetězce v položce seznamu.
int GetTextLen(int nIndex) const;
Parametry
nIndex
Určuje index založený na nule řetězce.
Návratová hodnota
Délka řetězce v značce s výjimkou ukončujícího znaku null. Pokud nIndex
neurčí platný index, návratová hodnota je LB_ERR
.
Příklad
Podívejte se na příklad pro CListBox::GetText
.
CListBox::GetTopIndex
Načte index založený na nule první viditelné položky v seznamu.
int GetTopIndex() const;
Návratová hodnota
Index první viditelné položky v seznamu založený na nule, pokud je úspěšný, LB_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 n = m_myListBox.GetCount() / 2;
if (m_myListBox.GetTopIndex() < n)
{
m_myListBox.SetTopIndex(n);
ASSERT(m_myListBox.GetTopIndex() == n);
}
CListBox::InitStorage
Přidělí paměť pro ukládání položek seznamu.
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 je maximální počet položek, které může seznam uložit před potřebou reallocation paměti, jinak LB_ERRSPACE
, což znamená, že není k dispozici dostatek paměti.
Poznámky
Volání této funkce před přidáním velkého počtu položek do .CListBox
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.
Pouze Windows 95/98: Parametr nItems
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í.
Příklad
// Initialize the storage of the list box to be 256 strings with
// about 10 characters per string, performance improvement.
int n = m_myListBox.InitStorage(256, 16 * sizeof(TCHAR));
ASSERT(n != LB_ERRSPACE);
// Add 256 items to the list box.
CString str;
for (int i = 0; i < 256; i++)
{
str.Format(_T("item string %d"), i);
m_myListBox.AddString(str);
}
CListBox::InsertString
Vloží řetězec do seznamu.
int InsertString(
int nIndex,
LPCTSTR lpszItem);
Parametry
nIndex
Určuje index založený na nule pozice pro vložení řetězce. Pokud je tento parametr -1, řetězec se přidá na konec seznamu.
lpszItem
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 LB_ERR
, pokud dojde k chybě. Vrácená hodnota je LB_ERRSPACE
v případě, že není k dispozici dostatek místa pro uložení nového řetězce.
Poznámky
AddString
Na rozdíl od členské funkce InsertString
nezpůsobí řazení seznamu se LBS_SORT
stylem.
Příklad
// Insert items in between existing items.
CString str;
int n = m_myListBox.GetCount();
for (int i = 0; i < n; i++)
{
str.Format(_T("item string %c"), (char)('A' + i));
m_myListBox.InsertString(2 * i, str);
}
CListBox::ItemFromPoint
Určuje položku seznamu, která je nejblíže bodu zadanému v pt
.
UINT ItemFromPoint(
CPoint pt,
BOOL& bOutside) const;
Parametry
pt
Bod, pro který se má najít nejbližší položka zadaná vzhledem k levému hornímu rohu klientské oblasti seznamu.
bOutside
Odkaz na proměnnou BOOL
, která bude nastavena TRUE
tak, aby byla pt
mimo klientskou oblast seznamu, FALSE
pokud pt
je uvnitř klientské oblasti seznamu.
Návratová hodnota
Index nejbližší položky k bodu zadanému v pt
.
Poznámky
Pomocí této funkce můžete určit, kterou položku seznamu se kurzor myši přesune.
Příklad
Podívejte se na příklad pro CListBox::SetAnchorIndex
.
CListBox::MeasureItem
Volá se rozhraním při vytvoření seznamu 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. Pokud je seznam vytvořen se stylem LBS_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.
Další informace o použití LBS_OWNERDRAWFIXED
stylu v seznamu pro kreslení vlastníka vytvořeného pomocí SubclassDlgItem
členské funkce CWnd
naleznete v diskuzi v technické poznámce 14.
Podívejte CWnd::OnMeasureItem
se na popis MEASUREITEMSTRUCT
struktury.
Příklad
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
ASSERT(lpMeasureItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC *pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}
CListBox::ResetContent
Odebere všechny položky ze seznamu.
void ResetContent();
Příklad
// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);
CListBox::SelectString
Vyhledá položku seznamu, která odpovídá zadanému řetězci, a pokud se najde odpovídající položka, vybere položku.
int SelectString(
int nStartAfter,
LPCTSTR lpszItem);
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 nStartAfter
je -1, prohledá se celé pole seznamu od začátku.
lpszItem
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, pokud bylo hledání úspěšné. Pokud hledání nebylo úspěšné, je vrácená hodnota LB_ERR
a aktuální výběr se nezmění.
Poznámky
V případě potřeby se seznam posune, aby se vybraná položka zobrazila.
Tuto členovou funkci nelze použít se seznamem se stylem LBS_MULTIPLESEL
.
Položka je vybrána pouze v případě, že počáteční znaky (od počátečního bodu) odpovídají znakům v řetězci určeném znakem lpszItem
.
FindString
Pomocí členské funkce vyhledejte řetězec bez výběru položky.
Příklad
// The string to match.
LPCTSTR lpszmyString = _T("item 5");
// Select the item that begins with the specified string.
int nIndex = m_myListBox.SelectString(0, lpszmyString);
ASSERT(nIndex != LB_ERR);
CListBox::SelItemRange
Vybere více po sobě jdoucích položek v seznamu s vícenásobným výběrem.
int SelItemRange(
BOOL bSelect,
int nFirstItem,
int nLastItem);
Parametry
bSelect
Určuje, jak nastavit výběr. Pokud bSelect
je TRUE
, řetězec je vybrán a zvýrazněn; pokud FALSE
je zvýraznění odebráno a řetězec již není vybrán.
nFirstItem
Určuje index založený na nule první položky, která se má nastavit.
nLastItem
Určuje index založený na nule poslední položky, která se má nastavit.
Návratová hodnota
LB_ERR
pokud dojde k chybě.
Poznámky
Tuto členovou funkci používejte pouze se seznamem s vícenásobným výběrem. Pokud potřebujete vybrat pouze jednu položku v seznamu s vícenásobným výběrem – to znamená, že je nFirstItem
rovno nLastItem
– místo toho volejte členovou SetSel
funkci.
Příklad
// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);
CListBox::SetAnchorIndex
Nastaví ukotvení v seznamu s vícenásobným výběrem a zahájí rozšířený výběr.
void SetAnchorIndex(int nIndex);
Parametry
nIndex
Určuje nulový index položky seznamu, která bude ukotvení.
Poznámky
V seznamu s vícenásobným výběrem je položka ukotvení první nebo poslední položkou v bloku souvislých vybraných položek.
Příklad
void CMyODListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
BOOL bOutside = TRUE;
UINT uItem = ItemFromPoint(point, bOutside);
if (!bOutside)
{
// Set the anchor to be the middle item.
SetAnchorIndex(uItem);
ASSERT((UINT)GetAnchorIndex() == uItem);
}
CListBox::OnLButtonDown(nFlags, point);
}
CListBox::SetCaretIndex
Nastaví obdélník fokusu na položku v zadaném indexu v seznamu s vícenásobným výběrem.
int SetCaretIndex(
int nIndex,
BOOL bScroll = TRUE);
Parametry
nIndex
Určuje index položky založený na nule, který má dostat obdélník fokusu v seznamu.
bScroll
Pokud je tato hodnota 0, položka se posune, dokud nebude zcela viditelná. Pokud tato hodnota není 0, položka se posune, dokud nebude alespoň částečně viditelná.
Návratová hodnota
LB_ERR
pokud dojde k chybě.
Poznámky
Pokud položka není viditelná, posune se do zobrazení.
Příklad
// Set the caret to be the middle item.
m_myListBox.SetCaretIndex(m_myListBox.GetCount() / 2);
ASSERT(m_myListBox.GetCaretIndex() == m_myListBox.GetCount() / 2);
CListBox::SetColumnWidth
Nastaví šířku v pixelech všech sloupců ve vícesloupcovém seznamu (vytvořeném pomocí LBS_MULTICOLUMN
stylu).
void SetColumnWidth(int cxWidth);
Parametry
cxWidth
Určuje šířku v pixelech všech sloupců.
Příklad
// Find the pixel width of the largest item.
CString str;
CSize sz;
int dx = 0;
CDC* pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
myListBox.ReleaseDC(pDC);
// Set the column width of the first column to be one and 1/3 units
// of the largest string.
myListBox.SetColumnWidth(dx * 4 / 3);
CListBox::SetCurSel
Vybere řetězec a v případě potřeby ho posune do zobrazení.
int SetCurSel(int nSelect);
Parametry
nSelect
Určuje index založený na nule řetězce, který se má vybrat. Pokud nSelect
je hodnota -1, je seznam nastavený tak, aby neměl žádný výběr.
Návratová hodnota
LB_ERR
pokud dojde k chybě.
Poznámky
Při výběru nového řetězce odebere seznam zvýraznění z dříve vybraného řetězce.
Tuto členovou funkci používejte pouze se seznamem s jedním výběrem.
Chcete-li nastavit nebo odebrat výběr v seznamu s vícenásobným výběrem, použijte CListBox::SetSel
.
Příklad
// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
m_myListBox.SetCurSel(nCount - 1);
CListBox::SetHorizontalExtent
Nastaví šířku v pixelech, podle kterých lze seznam posunout vodorovně.
void SetHorizontalExtent(int cxExtent);
Parametry
cxExtent
Určuje počet pixelů, podle kterých lze seznam posunout vodorovně.
Poznámky
Pokud je velikost seznamu menší než tato hodnota, vodorovný posuvník vodorovně posune položky v seznamu. Pokud je seznam velký nebo větší než tato hodnota, vodorovný posuvník je skrytý.
Chcete-li odpovědět na volání SetHorizontalExtent
, seznam musí být definován stylem WS_HSCROLL
.
Tato členská funkce není užitečná pro vícesloupcové seznamy. U vícesloupcových seznamů volejte členská SetColumnWidth
funkce.
Příklad
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_myListBox.GetDC();
CFont *pFont = m_myListBox.GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_myListBox.ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings
// can be scrolled to.
m_myListBox.SetHorizontalExtent(dx);
CListBox::SetItemData
Nastaví hodnotu přidruženou k zadané položce v seznamu.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Parametry
nIndex
Určuje index položky založený na nule.
dwItemData
Určuje hodnotu, která má být přidružena k položce.
Návratová hodnota
LB_ERR
pokud dojde k chybě.
Příklad
// Set the data of each item to be equal to its index.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.SetItemData(i, i);
}
CListBox::SetItemDataPtr
Nastaví 32bitovou hodnotu přidruženou k zadané položce v seznamu tak, aby byla zadaným ukazatelem ( void
*).
int SetItemDataPtr(
int nIndex,
void* pData);
Parametry
nIndex
Určuje index položky založený na nule.
pData
Určuje ukazatel, který má být přidružen k položce.
Návratová hodnota
LB_ERR
pokud dojde k chybě.
Poznámky
Tento ukazatel zůstane platný pro životnost pole seznamu, i když se relativní pozice položky v seznamu může změnit při přidávání nebo odebírá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_myListBox.GetCount(); i++)
{
m_myListBox.SetItemDataPtr(i, NULL);
}
CListBox::SetItemHeight
Nastaví výšku položek v seznamu.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Parametry
nIndex
Určuje index položky na základě nuly v seznamu. Tento parametr se používá pouze v případě, že má seznam LBS_OWNERDRAWVARIABLE
styl. V opačném případě by měl být nastaven na hodnotu 0.
cyItemHeight
Určuje výšku položky v pixelech.
Návratová hodnota
LB_ERR
pokud je index nebo výška neplatná.
Poznámky
Pokud má LBS_OWNERDRAWVARIABLE
seznam styl, tato funkce nastaví výšku položky určené nIndex
. V opačném případě tato funkce nastaví výšku všech položek v 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 = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
myListBox.SetItemHeight(i, sz.cy);
}
myListBox.ReleaseDC(pDC);
CListBox::SetLocale
Nastaví identifikátor národního prostředí pro toto pole seznamu.
LCID SetLocale(LCID nNewLocale);
Parametry
nNewLocale
Nová hodnota identifikátoru národního prostředí (LCID) nastavená pro seznam.
Návratová hodnota
Hodnota předchozího identifikátoru národního prostředí (LCID) pro toto pole seznamu.
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_myListBox.SetLocale(mylcid);
ASSERT(m_myListBox.GetLocale() == mylcid);
CListBox::SetSel
Vybere řetězec v seznamu s vícenásobným výběrem.
int SetSel(
int nIndex,
BOOL bSelect = TRUE);
Parametry
nIndex
Obsahuje index založený na nule řetězce, který se má nastavit. Pokud -1, výběr se přidá nebo odebere ze všech řetězců v závislosti na hodnotě bSelect
.
bSelect
Určuje, jak nastavit výběr. Pokud bSelect
je TRUE
, řetězec je vybrán a zvýrazněn; pokud FALSE
je zvýraznění odebráno a řetězec již není vybrán. Zadaný řetězec je vybraný a ve výchozím nastavení zvýrazněný.
Návratová hodnota
LB_ERR
pokud dojde k chybě.
Poznámky
Tuto členovou funkci používejte pouze se seznamem s vícenásobným výběrem.
Chcete-li vybrat položku ze seznamu s jedním výběrem, použijte CListBox::SetCurSel
.
Příklad
// Select all of the items with an even index and
// deselect all others.
for (int i = 0; i < m_myODListBox.GetCount(); i++)
{
m_myODListBox.SetSel(i, ((i % 2) == 0));
}
CListBox::SetTabStops
Nastaví pozice zarážky tabulátoru v seznamu.
void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);
BOOL SetTabStops(
int nTabStops,
LPINT rgTabStops);
Parametry
cxEachStop
Zarážky tabulátoru jsou nastavené v každé cxEachStop
jednotce dialogového okna. Podívejte rgTabStops
se na popis jednotky dialogového okna.
nTabStops
Určuje počet zarážek tabulátoru, které mají být v seznamu.
rgTabStops
Odkazuje na první člen pole celých čísel obsahujících pozice zarážky tabulátoru v jednotkách dialogového okna. Jednotka dialogového okna je vodorovná nebo svislá vzdálenost. Jedna vodorovná jednotka dialogového okna je rovna jedné čtvrté jednotce základní šířky dialogového okna a jedna svislá jednotka dialogového okna je rovna jedné osmé jednotce základní výšky dialogového okna. Základní jednotky dialogového okna se počítají na základě výšky a šířky aktuálního systémového písma. Funkce GetDialogBaseUnits
Windows vrátí aktuální základní jednotky dialogového okna v pixelech. Zarážky tabulátoru musí být seřazeny vzestupně; back tabs are not allowed.
Návratová hodnota
Nenulové, pokud byly nastaveny všechny karty; jinak 0.
Poznámky
Pokud chcete nastavit zarážky tabulátoru na výchozí velikost 2 jednotek dialogového okna, zavolejte bezparametrovou verzi této členské funkce. Pokud chcete nastavit zarážky tabulátoru na jinou velikost než 2, zavolejte verzi s argumentem cxEachStop
.
Pokud chcete nastavit zarážky tabulátoru na pole velikostí, použijte verzi s argumenty rgTabStops
a nTabStops
argumenty. Zarážka tabulátoru bude nastavena pro každou hodnotu v rgTabStops
, až do čísla určeného parametrem nTabStops
.
Chcete-li odpovědět na volání SetTabStops
členské funkce, musí být seznam vytvořen se stylem LBS_USETABSTOPS
.
Příklad
// Find the pixel width of the largest first substring.
CString str;
CSize sz;
int nIndex, dx = 0;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
if ((nIndex = str.Find('\t')) != -1)
str = str.Right(nIndex);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
myListBox.ReleaseDC(pDC);
// Set tab stops at every one and 1/3 units
// of the largest string.
// NOTE: Convert pixels to dialog units.
myListBox.SetTabStops((dx * 4 / 3 * 4) / LOWORD(::GetDialogBaseUnits()));
CListBox::SetTopIndex
Zajišťuje, aby byla viditelná konkrétní položka seznamu.
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 LB_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 list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);
CListBox::VKeyToItem
Volá se rozhraním, když nadřazené okno seznamu obdrží WM_VKEYTOITEM
zprávu ze seznamu.
virtual int VKeyToItem(
UINT nKey,
UINT nIndex);
Parametry
nKey
Kód virtuálního klíče, který uživatel stiskl. Seznam standardních kódů virtuálních klíčů najdete v tématu . Winuser.h
nIndex
Aktuální pozice kurzoru seznamu.
Návratová hodnota
Vrátí hodnotu - 2 pro žádnou další akci, - 1 pro výchozí akci nebo nenegativní číslo k určení indexu položky seznamu, na které se má provést výchozí akce pro stisknutí kláves.
Poznámky
Zpráva WM_VKEYTOITEM
je odeslána seznamem, když obdrží WM_KEYDOWN
zprávu, ale pouze v případě, že seznam splňuje obě následující:
LBS_WANTKEYBOARDINPUT
Má sadu stylů.Obsahuje aspoň jednu položku.
Tuto funkci byste nikdy neměli volat sami. Přepište tuto funkci tak, aby poskytovala vlastní zpracování zpráv klávesnice.
Musíte vrátit hodnotu, která architektuře řekne, jakou akci vaše přepsání provedlo. Návratová hodnota – 2 označuje, že aplikace zpracovala všechny aspekty výběru položky a nevyžaduje žádnou další akci v seznamu. Než se vrátíte na hodnotu 2, můžete nastavit výběr nebo přesunout stříšku nebo obojí. Chcete-li nastavit výběr, použijte SetCurSel
nebo SetSel
. Chcete-li přesunout stříšku, použijte SetCaretIndex
.
Návratová hodnota - 1 označuje, že seznam by měl provést výchozí akci v reakci na stisknutí klávesy. Výchozí implementace vrátí hodnotu - 1.
Návratová hodnota 0 nebo vyšší určuje index položky v seznamu a označuje, že seznam by měl provést výchozí akci pro stisknutí klávesy u dané položky.
Příklad
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on the down key and up one item
// on the up key. The list box control was created with the following
// code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::VKeyToItem(UINT nKey, UINT nIndex)
{
// On key up, move the caret up one item.
if ((nKey == VK_UP) && (nIndex > 0))
{
SetCaretIndex(nIndex - 1);
}
// On key down, move the caret down one item.
else if ((nKey == VK_DOWN) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex + 1);
}
// Do not perform any default processing.
return -2;
}
Viz také
MFC – ukázka CTRLTEST
CWnd
Třída
Graf hierarchie
CWnd
Třída
CButton
Třída
CComboBox
Třída
CEdit
Třída
CScrollBar
Třída
CStatic
Třída