Sdílet prostřednictvím


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 se LBS_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 členkou CListBox::SetCurSel funkce. Toto oznámení platí jenom pro seznam, který má LBS_NOTIFY styl. Zpráva LBN_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ý neobsahuje WM_CHAR žádné řetězce, neobdrží zprávu.

  • ON_WM_VKEYTOITEM Seznam se LBS_WANTKEYBOARDINPUT stylem WM_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

CObject

CCmdTarget

CWnd

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_NCCREATEprvku seznam , WM_NCCALCSIZEWM_CREATEa WM_GETMINMAXINFO zprávy.

Tyto zprávy jsou zpracovávány ve výchozím nastavení OnNcCreatepomocí , OnCreate, OnNcCalcSizea OnGetMinMaxInfo členské funkce v CWnd základní třídě. Chcete-li rozšířit výchozí zpracování zpráv, odvodit třídu z 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ždy

  • WS_VISIBLE Obvykle

  • WS_DISABLED Zřídka

  • WS_VSCROLL Přidání svislého posuvníku

  • WS_HSCROLL Přidání vodorovného posuvníku

  • WS_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 lpszFindslova 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é nIndexhodnotou . 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é AddStringInsertStringfunkce a Dir funkce trvalo nejkratší možnou dobu. Pro parametry můžete použít odhady. Pokud nadlimitujete, je přidělena nějaká další paměť; pokud podceňujete, použije se normální přidělení pro položky, které překračují předem přidělenou částku.

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 CWndnaleznete 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 FALSEje 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 FALSEje 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í:

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