Udostępnij za pośrednictwem


CListBox Klasa

Zawiera funkcje pola listy systemu Windows.

Składnia

class CListBox : public CWnd

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CListBox::CListBox CListBox Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
CListBox::AddString Dodaje ciąg do pola listy.
CListBox::CharToItem Zastąpić, aby zapewnić niestandardową WM_CHAR obsługę pól listy rysowania właściciela, które nie mają ciągów.
CListBox::CompareItem Wywoływana przez strukturę w celu określenia położenia nowego elementu w posortowanym polu listy właściciela-rysowanie.
CListBox::Create Tworzy pole listy systemu Windows i dołącza je do CListBox obiektu.
CListBox::DeleteItem Wywoływana przez platformę, gdy użytkownik usunie element z pola listy właściciel-rysowanie.
CListBox::DeleteString Usuwa ciąg z pola listy.
CListBox::Dir Dodaje nazwy plików, dysków lub obu z bieżącego katalogu do pola listy.
CListBox::DrawItem Wywoływana przez platformę, gdy zmienia się wizualny aspekt pola listy właściciela.
CListBox::FindString Wyszukuje ciąg w polu listy.
CListBox::FindStringExact Znajduje pierwszy ciąg pola listy zgodny z określonym ciągiem.
CListBox::GetAnchorIndex Pobiera indeks zerowy bieżącego elementu zakotwiczenia w polu listy.
CListBox::GetCaretIndex Określa indeks elementu, który ma prostokąt fokusu w polu listy wielokrotnego wyboru.
CListBox::GetCount Zwraca liczbę ciągów w polu listy.
CListBox::GetCurSel Zwraca indeks zerowy aktualnie wybranego ciągu w polu listy.
CListBox::GetHorizontalExtent Zwraca szerokość w pikselach, którą pole listy można przewijać w poziomie.
CListBox::GetItemData Zwraca wartość skojarzona z elementem pola listy.
CListBox::GetItemDataPtr Zwraca wskaźnik do elementu pola listy.
CListBox::GetItemHeight Określa wysokość elementów w polu listy.
CListBox::GetItemRect Zwraca prostokąt ograniczenia elementu pola listy, który jest obecnie wyświetlany.
CListBox::GetListBoxInfo Pobiera liczbę elementów na kolumnę.
CListBox::GetLocale Pobiera identyfikator ustawień regionalnych dla pola listy.
CListBox::GetSel Zwraca stan zaznaczenia elementu pola listy.
CListBox::GetSelCount Zwraca liczbę ciągów aktualnie zaznaczonych w polu listy wielokrotnego wyboru.
CListBox::GetSelItems Zwraca indeksy ciągów aktualnie wybranych w polu listy.
CListBox::GetText Kopiuje element pola listy do buforu.
CListBox::GetTextLen Zwraca długość w bajtach elementu pola listy.
CListBox::GetTopIndex Zwraca indeks pierwszego widocznego ciągu w polu listy.
CListBox::InitStorage Wstępnie przydziela bloki pamięci dla elementów pól listy i ciągów.
CListBox::InsertString Wstawia ciąg w określonej lokalizacji w polu listy.
CListBox::ItemFromPoint Zwraca indeks najbliższego punktu elementu pola listy.
CListBox::MeasureItem Wywoływana przez platformę, gdy zostanie utworzone pole listy właściciel-rysowanie w celu określenia wymiarów pola listy.
CListBox::ResetContent Czyści wszystkie wpisy z pola listy.
CListBox::SelectString Wyszukuje i wybiera ciąg w polu listy z jednym wyborem.
CListBox::SelItemRange Wybiera lub usuwa zaznaczenie zakresu ciągów w polu listy wielokrotnego wyboru.
CListBox::SetAnchorIndex Ustawia kotwicę w polu listy wielokrotnego wyboru, aby rozpocząć wybór rozszerzony.
CListBox::SetCaretIndex Ustawia prostokąt fokusu na element w określonym indeksie w polu listy wielokrotnego wyboru.
CListBox::SetColumnWidth Ustawia szerokość kolumny pola listy wielokolumnowej.
CListBox::SetCurSel Wybiera ciąg pola listy.
CListBox::SetHorizontalExtent Ustawia szerokość w pikselach, którą pole listy można przewijać w poziomie.
CListBox::SetItemData Ustawia wartość skojarzona z elementem pola listy.
CListBox::SetItemDataPtr Ustawia wskaźnik na element pola listy.
CListBox::SetItemHeight Ustawia wysokość elementów w polu listy.
CListBox::SetLocale Ustawia identyfikator ustawień regionalnych dla pola listy.
CListBox::SetSel Wybiera lub usuwa zaznaczenie elementu pola listy w polu listy wielokrotnego wyboru.
CListBox::SetTabStops Ustawia pozycje tabulatora w polu listy.
CListBox::SetTopIndex Ustawia indeks zerowy pierwszego widocznego ciągu w polu listy.
CListBox::VKeyToItem Zastąpić, aby zapewnić niestandardową WM_KEYDOWN obsługę pól listy z zestawem LBS_WANTKEYBOARDINPUT stylów.

Uwagi

W polu listy zostanie wyświetlona lista elementów, takich jak nazwy plików, które użytkownik może wyświetlić i wybrać.

W polu listy z jednym wyborem użytkownik może wybrać tylko jeden element. W polu listy wielokrotnego wyboru można wybrać zakres elementów. Gdy użytkownik wybierze element, zostanie wyróżniony, a pole listy wyśle komunikat z powiadomieniem do okna nadrzędnego.

Możesz utworzyć pole listy na podstawie szablonu okna dialogowego lub bezpośrednio w kodzie. Aby utworzyć go bezpośrednio, skonstruuj CListBox obiekt, a następnie wywołaj Create funkcję składową, aby utworzyć kontrolkę pola listy systemu Windows i dołączyć ją do CListBox obiektu. Aby użyć pola listy w szablonie okna dialogowego, zadeklaruj zmienną pola listy w klasie okna dialogowego, a następnie użyj funkcji DDX_Control klasy DoDataExchange okna dialogowego, aby połączyć zmienną składową z kontrolką. (Jest to wykonywane automatycznie po dodaniu zmiennej sterującej do klasy okna dialogowego).

Konstrukcja może być procesem jednoetapowym w klasie pochodzącej z CListBoxklasy . Napisz konstruktor dla klasy pochodnej i wywołaj Create metodę z wewnątrz konstruktora.

Jeśli chcesz obsługiwać komunikaty powiadomień systemu Windows wysyłane przez pole listy do elementu nadrzędnego (zazwyczaj klasy pochodzącej z CDialogklasy ), dodaj funkcję składową elementu członkowskiego mapy komunikatów i obsługi komunikatów do klasy nadrzędnej dla każdego komunikatu.

Każdy wpis mapy komunikatów ma następujący formularz:

ON_Notification( id, memberFxn )

gdzie id określa identyfikator okna podrzędnego kontrolki pola listy wysyłającej powiadomienie i memberFxn jest nazwą nadrzędnej funkcji składowej zapisanej w celu obsługi powiadomienia.

Prototyp funkcji elementu nadrzędnego jest następujący:

afx_msg void memberFxn( );

Poniżej znajduje się lista potencjalnych wpisów mapy komunikatów i opis przypadków, w których zostaną one wysłane do elementu nadrzędnego:

  • ON_LBN_DBLCLK Użytkownik klika dwukrotnie ciąg w polu listy. Tylko pole listy, które ma LBS_NOTIFY styl, spowoduje wysłanie tej wiadomości z powiadomieniem.

  • ON_LBN_ERRSPACE Pole listy nie może przydzielić wystarczającej ilości pamięci, aby spełnić żądanie.

  • ON_LBN_KILLFOCUS Pole listy traci fokus wejściowy.

  • ON_LBN_SELCANCEL Bieżące zaznaczenie pola listy zostało anulowane. Ta wiadomość jest wysyłana tylko wtedy, gdy pole listy ma LBS_NOTIFY styl.

  • ON_LBN_SELCHANGE Wybór w polu listy został zmieniony. To powiadomienie nie jest wysyłane, jeśli zaznaczenie zostanie zmienione przez funkcję składową CListBox::SetCurSel . To powiadomienie dotyczy tylko pola listy, które ma LBS_NOTIFY styl. Wiadomość LBN_SELCHANGE z powiadomieniem jest wysyłana dla pola listy wielokrotnego wyboru za każdym razem, gdy użytkownik naciśnie strzałki, nawet jeśli zaznaczenie nie ulegnie zmianie.

  • ON_LBN_SETFOCUS Pole listy odbiera fokus danych wejściowych.

  • ON_WM_CHARTOITEM Pole listy losowania właściciela, które nie ma ciągów, otrzymuje WM_CHAR komunikat.

  • ON_WM_VKEYTOITEM Pole listy ze LBS_WANTKEYBOARDINPUT stylem WM_KEYDOWN odbiera komunikat.

Jeśli utworzysz CListBox obiekt w oknie dialogowym (za pomocą zasobu okna dialogowego), CListBox obiekt zostanie automatycznie zniszczony, gdy użytkownik zamknie okno dialogowe.

Jeśli utworzysz CListBox obiekt w oknie, może być konieczne zniszczenie CListBox obiektu. Jeśli utworzysz CListBox obiekt na stosie, zostanie on zniszczony automatycznie. Jeśli utworzysz CListBox obiekt na stercie przy użyciu new funkcji, musisz wywołać delete obiekt, aby go zniszczyć, gdy użytkownik zamknie okno nadrzędne.

Jeśli przydzielisz jakąkolwiek pamięć w CListBox obiekcie, przesłoń CListBox destruktor do usunięcia alokacji.

Hierarchia dziedziczenia

CObject

CCmdTarget

CWnd

CListBox

Wymagania

Nagłówek: afxwin.h

CListBox::AddString

Dodaje ciąg do pola listy.

int AddString(LPCTSTR lpszItem);

Parametry

lpszItem
Wskazuje ciąg zakończony na wartość null, który ma zostać dodany.

Wartość zwracana

Indeks oparty na zera do ciągu w polu listy. Wartość zwracana jest LB_ERR wtedy, gdy wystąpi błąd. Zwracana wartość to LB_ERRSPACE , jeśli do przechowywania nowego ciągu jest za mało miejsca.

Uwagi

Jeśli pole listy nie zostało utworzone ze stylem LBS_SORT , ciąg zostanie dodany na końcu listy. W przeciwnym razie ciąg zostanie wstawiony do listy, a lista zostanie posortowana. Jeśli pole listy zostało utworzone ze LBS_SORT stylem, ale nie LBS_HASSTRINGS stylem, struktura sortuje listę według co najmniej jednego wywołania funkcji składowej CompareItem .

Użyj polecenia InsertString , aby wstawić ciąg do określonej lokalizacji w polu listy.

Przykład

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

Wywoływana przez platformę, gdy okno nadrzędne pola listy odbiera WM_CHARTOITEM komunikat z pola listy.

virtual int CharToItem(
    UINT nKey,
    UINT nIndex);

Parametry

nKey
Kod ANSI znaku wpisanego przez użytkownika.

nIndex
Bieżąca pozycja karetki pola listy.

Wartość zwracana

Zwraca wartość — 1 lub - 2 dla żadnej kolejnej akcji lub liczby nienależącej do określenia indeksu elementu pola listy, na którym ma być wykonywana domyślna akcja naciśnięcia. Domyślna implementacja zwraca wartość - 1.

Uwagi

Komunikat WM_CHARTOITEM jest wysyłany przez pole listy po odebraniu komunikatu WM_CHAR , ale tylko wtedy, gdy pole listy spełnia wszystkie następujące kryteria:

  • To pole listy właściciel-rysowanie.

  • Nie ma LBS_HASSTRINGS zestawu stylów.

  • Ma co najmniej jeden element.

Nigdy nie należy wywoływać tej funkcji samodzielnie. Zastąp tę funkcję, aby zapewnić własną niestandardową obsługę komunikatów klawiaturowych.

W przesłonięcie należy zwrócić wartość, aby poinformować strukturę, jaką akcję wykonano. Wartość zwracana 1 lub -2 wskazuje, że wszystkie aspekty wybierania elementu nie wymagają dalszych działań w polu listy. Przed zwróceniem wartości - 1 lub - 2 można ustawić zaznaczenie lub przenieść daszek lub oba te elementy. Aby ustawić zaznaczenie, użyj polecenia SetCurSel lub SetSel. Aby przenieść daszek, użyj polecenia SetCaretIndex.

Wartość zwracana 0 lub większa określa indeks elementu w polu listy i wskazuje, że pole listy powinno wykonać domyślną akcję naciśnięcia na danym elemencie.

Przykład

// 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 Tworzy obiekt.

CListBox();

Uwagi

Obiekt jest konstruowany CListBox w dwóch krokach. Najpierw wywołaj konstruktor, a następnie wywołaj metodę ClistBox , która inicjuje pole listy systemu Windows i dołącza je do elementu CListBox.Create

Przykład

// Declare a local CListBox object.
CListBox myListBox;

// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;

CListBox::CompareItem

Wywoływana przez platformę w celu określenia względnej pozycji nowego elementu w posortowanym polu listy losowania właściciela.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

Parametry

lpCompareItemStruct
Długi wskaźnik do COMPAREITEMSTRUCT struktury.

Wartość zwracana

Wskazuje względną pozycję dwóch elementów opisanych w COMPAREITEMSTRUCT strukturze. Może to być dowolna z następujących wartości:

Wartość Znaczenie
-1 Element 1 sortuje przed pozycją 2.
0 Element 1 i element 2 posortuj to samo.
1 Element 1 sortuje po elemencie 2.

Zobacz CWnd::OnCompareItem opis COMPAREITEMSTRUCT struktury.

Uwagi

Domyślnie ta funkcja składowa nic nie robi. Jeśli utworzysz pole LBS_SORT listy właścicieli z stylem, musisz zastąpić tę funkcję składową, aby ułatwić strukturę sortowania nowych elementów dodanych do pola listy.

Przykład

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

Tworzy pole listy systemu Windows i dołącza je do CListBox obiektu.

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

Parametry

dwStyle
Określa styl pola listy. Zastosuj dowolną kombinację stylów pola listy do pola.

rect
Określa rozmiar i położenie pola listy. Może być obiektem CRect lub strukturą RECT .

pParentWnd
Określa okno nadrzędne pola listy (zazwyczaj CDialog obiekt). Nie może to być NULL.

nID
Określa identyfikator kontrolki pola listy.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Obiekt jest konstruowany CListBox w dwóch krokach. Najpierw wywołaj konstruktor, a następnie wywołaj Createmetodę , która inicjuje pole listy systemu Windows i dołącza go do CListBox obiektu.

Podczas Create wykonywania system Windows wysyła WM_NCCREATEkomunikaty , WM_CREATE, WM_NCCALCSIZEi WM_GETMINMAXINFO do kontrolki pola listy.

Te komunikaty są domyślnie obsługiwane przez OnNcCreatefunkcje składowe , OnCreate, OnNcCalcSizei OnGetMinMaxInfo w klasie bazowej CWnd . Aby rozszerzyć domyślną obsługę komunikatów, należy utworzyć klasę z CListBoxklasy , dodać mapę komunikatów do nowej klasy i zastąpić poprzednie funkcje składowe programu obsługi komunikatów. Zastąpij OnCreatena przykład , aby wykonać wymaganą inicjację dla nowej klasy.

Zastosuj następujące style okna do kontrolki pola listy.

  • WS_CHILD Zawsze

  • WS_VISIBLE Zwykle

  • WS_DISABLED Rzadko

  • WS_VSCROLL Aby dodać pionowy pasek przewijania

  • WS_HSCROLL Aby dodać poziomy pasek przewijania

  • WS_GROUP Aby grupować kontrolki

  • WS_TABSTOP Aby zezwolić na tabulacji do tej kontrolki

Przykład

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

Wywoływana przez platformę, gdy użytkownik usuwa element z obiektu rysowania CListBox właściciela lub niszczy pole listy.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Parametry

lpDeleteItemStruct
Długi wskaźnik struktury systemu Windows DELETEITEMSTRUCT zawierający informacje o usuniętym elemencie.

Uwagi

Domyślna implementacja tej funkcji nic nie robi. Zastąpij tę funkcję, aby w razie potrzeby ponownie narysować pole listy właściciela.

Zobacz CWnd::OnDeleteItem opis DELETEITEMSTRUCT struktury.

Przykład

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

Usuwa element w pozycji nIndex z pola listy.

int DeleteString(UINT nIndex);

Parametry

nIndex
Określa indeks zerowy ciągu, który ma zostać usunięty.

Wartość zwracana

Liczba ciągów pozostałych na liście. Wartość zwracana to LB_ERR , jeśli nIndex określa indeks większy niż liczba elementów na liście.

Uwagi

Wszystkie poniższe nIndex elementy przenoszą się teraz w dół o jedną pozycję. Jeśli na przykład pole listy zawiera dwa elementy, usunięcie pierwszego elementu spowoduje, że pozostały element będzie teraz w pierwszej pozycji. nIndex=0 dla elementu w pierwszej pozycji.

Przykład

// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.DeleteString(i);
}

CListBox::Dir

Dodaje listę nazw plików, dysków lub obu tych plików do pola listy.

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

Parametry

attr
Może być dowolną kombinacją wartości opisanych enum w pliku CFile::GetStatuslub dowolnej kombinacji następujących wartości:

Wartość Znaczenie
0x0000 Plik może być odczytywany lub zapisywany.
0x0001 Plik można odczytać, ale nie zapisywać.
0x0002 Plik jest ukryty i nie jest wyświetlany na liście katalogów.
0x0004 Plik jest plikiem systemowym.
0x0010 Nazwa określona przez lpszWildCard określa katalog.
0x0020 Plik został zarchiwizowany.
0x4000 Uwzględnij wszystkie dyski zgodne z nazwą określoną przez lpszWildCard.
0x8000 Flaga wyłączna. Jeśli flaga wyłączna jest ustawiona, wyświetlane są tylko pliki określonego typu. W przeciwnym razie pliki określonego typu są wyświetlane oprócz "normalnych" plików.

lpszWildCard
Wskazuje ciąg specyfikacji pliku. Ciąg może zawierać symbole wieloznaczne (na przykład *.*).

Wartość zwracana

Indeks zerowy ostatniej nazwy pliku dodany do listy. Wartość zwracana jest LB_ERR w przypadku wystąpienia błędu. Zwracana wartość to LB_ERRSPACE , jeśli do przechowywania nowych ciągów jest za mało miejsca.

Przykład

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

Wywoływana przez platformę, gdy zmienia się wizualny aspekt pola listy właściciela.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parametry

lpDrawItemStruct
Długi wskaźnik do DRAWITEMSTRUCT struktury zawierającej informacje o wymaganym typie rysunku.

Uwagi

Elementy itemAction DRAWITEMSTRUCT i itemState struktury definiują akcję rysunku, która ma zostać wykonana.

Domyślnie ta funkcja składowa nic nie robi. Zastąpi tę funkcję składową, aby zaimplementować rysunek dla obiektu rysowania CListBox właściciela. Aplikacja powinna przywrócić wszystkie obiekty interfejsu urządzenia graficznego (GDI) wybrane dla kontekstu wyświetlania podanego w lpDrawItemStruct przed zakończeniem tej funkcji składowej.

Zobacz CWnd::OnDrawItem opis DRAWITEMSTRUCT struktury.

Przykład

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

Znajduje pierwszy ciąg w polu listy, który zawiera określony prefiks bez zmiany zaznaczenia pola listy.

int FindString(
    int nStartAfter,
    LPCTSTR lpszItem) const;

Parametry

nStartAfter
Zawiera indeks zerowy elementu przed przeszukanym pierwszym elementem. Gdy wyszukiwanie osiągnie dół pola listy, będzie kontynuowane z góry pola listy z powrotem do elementu określonego przez nStartAfter. Jeśli nStartAfter wartość to -1, całe pole listy jest wyszukiwane od początku.

lpszItem
Wskazuje ciąg zakończony na wartość null, który zawiera prefiks do wyszukania. Wyszukiwanie jest niezależne od wielkości liter, więc ten ciąg może zawierać dowolną kombinację wielkich i małych liter.

Wartość zwracana

Indeks oparty na zerze pasującego elementu lub LB_ERR jeśli wyszukiwanie nie powiodło się.

Uwagi

Użyj funkcji składowej SelectString , aby znaleźć i wybrać ciąg.

Przykład

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

Znajduje pierwszy ciąg pola listy zgodny z ciągiem określonym w pliku lpszFind.

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

Parametry

nIndexStart
Określa indeks zerowy elementu przed przeszukanym pierwszym elementem. Gdy wyszukiwanie osiągnie dół pola listy, będzie kontynuowane z góry pola listy z powrotem do elementu określonego przez nIndexStart. Jeśli nIndexStart wartość to -1, całe pole listy jest wyszukiwane od początku.

lpszFind
Wskazuje ciąg zakończony na wartość null, aby wyszukać. Ten ciąg może zawierać pełną nazwę pliku, w tym rozszerzenie. Wyszukiwanie nie uwzględnia wielkości liter, więc ciąg może zawierać dowolną kombinację wielkich i małych liter.

Wartość zwracana

Indeks pasującego elementu lub LB_ERR jeśli wyszukiwanie nie powiodło się.

Uwagi

Jeśli pole listy zostało utworzone przy użyciu stylu rysowania właściciela, ale bez LBS_HASSTRINGS stylu, FindStringExact funkcja składowa próbuje dopasować wartość doubleword względem wartości lpszFind.

Przykład

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

Pobiera indeks zerowy bieżącego elementu zakotwiczenia w polu listy.

int GetAnchorIndex() const;

Wartość zwracana

Indeks bieżącego elementu zakotwiczenia, jeśli się powiedzie; w przeciwnym razie LB_ERR.

Uwagi

W polu listy wielokrotnej zaznaczenia element kotwicy jest pierwszym lub ostatnim elementem w bloku ciągłych zaznaczonych elementów.

Przykład

Zobacz przykład dla elementu CListBox::SetAnchorIndex.

CListBox::GetCaretIndex

Określa indeks elementu, który ma prostokąt fokusu w polu listy wielokrotnego wyboru.

int GetCaretIndex() const;

Wartość zwracana

Indeks zerowy elementu, który ma prostokąt fokusu w polu listy. Jeśli pole listy jest polem listy z jednym wyborem, zwracana wartość jest indeksem wybranego elementu, jeśli istnieje.

Uwagi

Element może być wybrany lub nie został wybrany.

Przykład

Zobacz przykład dla elementu CListBox::SetCaretIndex.

CListBox::GetCount

Pobiera liczbę elementów w polu listy.

int GetCount() const;

Wartość zwracana

Liczba elementów w polu listy lub LB_ERR jeśli wystąpi błąd.

Uwagi

Zwrócona liczba jest większa niż wartość indeksu ostatniego elementu (indeks jest oparty na zera).

Przykład

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

Pobiera indeks zerowy aktualnie wybranego elementu, jeśli istnieje, w polu listy z jednym zaznaczeniem.

int GetCurSel() const;

Wartość zwracana

Indeks oparty na zera aktualnie wybranego elementu, jeśli jest to pole listy z jednym wyborem. LB_ERR Jest to, jeśli żaden element nie jest obecnie wybrany.

W polu listy wielokrotnego wyboru indeks elementu, który ma fokus.

Uwagi

Nie należy wywoływać GetCurSel pola listy wielokrotnego wyboru. Użycie w zamian parametru CListBox::GetSelItems.

Przykład

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

Pobiera z pola listy szerokość w pikselach, za pomocą których można ją przewijać w poziomie.

int GetHorizontalExtent() const;

Wartość zwracana

Przewijana szerokość pola listy w pikselach.

Uwagi

Ma to zastosowanie tylko wtedy, gdy pole listy ma poziomy pasek przewijania.

Przykład

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

Pobiera podaną przez aplikację wartość doubleword skojarzona z określonym elementem pola listy.

DWORD_PTR GetItemData(int nIndex) const;

Parametry

nIndex
Określa indeks zerowy elementu w polu listy.

Wartość zwracana

Wartość skojarzona z elementem lub LB_ERR jeśli wystąpi błąd.

Uwagi

Wartość doubleword była dwItemData parametrem wywołania SetItemData .

Przykład

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

Pobiera podaną przez aplikację wartość 32-bitową skojarzona z określonym elementem pola listy jako wskaźnik (void *).

void* GetItemDataPtr(int nIndex) const;

Parametry

nIndex
Określa indeks zerowy elementu w polu listy.

Wartość zwracana

Pobiera wskaźnik lub -1, jeśli wystąpi błąd.

Przykład

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

Określa wysokość elementów w polu listy.

int GetItemHeight(int nIndex) const;

Parametry

nIndex
Określa indeks zerowy elementu w polu listy. Ten parametr jest używany tylko wtedy, gdy pole listy ma LBS_OWNERDRAWVARIABLE styl. W przeciwnym razie należy ustawić wartość 0.

Wartość zwracana

Wysokość w pikselach elementów w polu listy. Jeśli pole listy ma LBS_OWNERDRAWVARIABLE styl, zwracana wartość to wysokość elementu określonego przez nIndex. Jeśli wystąpi błąd, zwracana wartość to LB_ERR.

Przykład

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

Pobiera wymiary prostokąta powiązanego z elementem pola listy, ponieważ jest on obecnie wyświetlany w oknie pola listy.

int GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

Parametry

nIndex
Określa indeks zerowy elementu.

lpRect
Określa długi wskaźnik do RECT struktury , która odbiera współrzędne klienta pola listy elementu.

Wartość zwracana

LB_ERR jeśli wystąpi błąd.

Przykład

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

Pobiera liczbę elementów na kolumnę.

DWORD GetListBoxInfo() const;

Wartość zwracana

Liczba elementów na kolumnę CListBox obiektu.

Uwagi

Ta funkcja składowa emuluje funkcjonalność komunikatu LB_GETLISTBOXINFO zgodnie z opisem w zestawie WINDOWS SDK.

CListBox::GetLocale

Pobiera ustawienia regionalne używane przez pole listy.

LCID GetLocale() const;

Wartość zwracana

Wartość identyfikatora ustawień regionalnych (LCID) dla ciągów w polu listy.

Uwagi

Ustawienia regionalne są używane na przykład w celu określenia kolejności sortowania ciągów w polu posortowanej listy.

Przykład

Zobacz przykład dla elementu CListBox::SetLocale.

CListBox::GetSel

Pobiera stan zaznaczenia elementu.

int GetSel(int nIndex) const;

Parametry

nIndex
Określa indeks zerowy elementu.

Wartość zwracana

Liczba dodatnia, jeśli wybrano określony element; w przeciwnym razie wartość wynosi 0. Zwracana wartość to LB_ERR , jeśli wystąpi błąd.

Uwagi

Ta funkcja składowa działa zarówno z polami listy pojedynczej, jak i wielokrotnej wyboru.

Aby pobrać indeks aktualnie wybranego elementu pola listy, użyj polecenia CListBox::GetCurSel.

Przykład

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

Pobiera łączną liczbę wybranych elementów w polu listy wielokrotnego wyboru.

int GetSelCount() const;

Wartość zwracana

Liczba wybranych elementów w polu listy. Jeśli pole listy jest polem listy z jednym wyborem, zwracana wartość to LB_ERR.

Przykład

Zobacz przykład dla elementu CListBox::GetSelItems.

CListBox::GetSelItems

Wypełnia bufor tablicą liczb całkowitych, która określa numery elementów wybranych elementów w polu listy wielokrotnej zaznaczenia.

int GetSelItems(
    int nMaxItems,
    LPINT rgIndex) const;

Parametry

nMaxItems
Określa maksymalną liczbę wybranych elementów, których numery elementów mają zostać umieszczone w buforze.

rgIndex
Określa wskaźnik do buforu wystarczająco duży dla liczby liczb całkowitych określonych przez nMaxItems.

Wartość zwracana

Rzeczywista liczba elementów umieszczonych w buforze. Jeśli pole listy jest polem listy z jednym wyborem, zwracana wartość to LB_ERR.

Przykład

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

Pobiera ciąg z pola listy.

int GetText(
    int nIndex,
    LPTSTR lpszBuffer) const;

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

Parametry

nIndex
Określa indeks zerowy ciągu, który ma zostać pobrany.

lpszBuffer
Wskazuje bufor, który odbiera ciąg. Bufor musi mieć wystarczającą ilość miejsca dla ciągu i znak null zakończenia. Rozmiar ciągu można określić z wyprzedzeniem przez wywołanie funkcji składowej GetTextLen .

rString
Odwołanie do CString obiektu.

Wartość zwracana

Długość ciągu (w bajtach) z wyłączeniem znaku null zakończenia. Jeśli nIndex nie określi prawidłowego indeksu, zwracana wartość to LB_ERR.

Uwagi

Druga forma tej funkcji składowej wypełnia CString obiekt tekstem ciągu.

Przykład

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

Pobiera długość ciągu w elemencie pola listy.

int GetTextLen(int nIndex) const;

Parametry

nIndex
Określa indeks zerowy ciągu.

Wartość zwracana

Długość ciągu w znakach z wyłączeniem znaku null zakończenia. Jeśli nIndex nie określi prawidłowego indeksu, zwracana wartość to LB_ERR.

Przykład

Zobacz przykład dla elementu CListBox::GetText.

CListBox::GetTopIndex

Pobiera indeks zerowy pierwszego widocznego elementu w polu listy.

int GetTopIndex() const;

Wartość zwracana

Indeks oparty na zera pierwszego widocznego elementu w polu listy, jeśli się powiedzie, LB_ERR w przeciwnym razie.

Uwagi

Początkowo element 0 znajduje się w górnej części pola listy, ale jeśli pole listy jest przewijane, inny element może znajdować się u góry.

Przykład

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

Przydziela pamięć do przechowywania elementów list-box.

int InitStorage(
    int nItems,
    UINT nBytes);

Parametry

nItems
Określa liczbę elementów do dodania.

nBytes
Określa ilość pamięci w bajtach, które mają być przydzielane dla ciągów elementów.

Wartość zwracana

Jeśli operacja powiedzie się, maksymalna liczba elementów, które może przechowywać pole listy przed potrzebą reallokacji pamięci, w przeciwnym razie LB_ERRSPACE, co oznacza, że za mało pamięci jest dostępna.

Uwagi

Wywołaj tę funkcję przed dodaniem dużej liczby elementów do elementu CListBox.

Ta funkcja pomaga przyspieszyć inicjowanie pól listy, które mają dużą liczbę elementów (więcej niż 100). Wstępnie przydziela określoną ilość pamięci, dzięki czemu kolejne AddStringfunkcje , InsertStringi Dir zajmują najkrótszy możliwy czas. Możesz użyć oszacowań dla parametrów. Jeśli przecenisz, zostanie przydzielona pewna dodatkowa pamięć; jeśli nie doceniasz, normalna alokacja jest używana dla elementów, które przekraczają wstępnie przydzieloną kwotę.

Tylko system Windows 95/98: nItems parametr jest ograniczony do wartości 16-bitowych. Oznacza to, że pola listy nie mogą zawierać więcej niż 32 767 elementów. Chociaż liczba elementów jest ograniczona, łączny rozmiar elementów w polu listy jest ograniczony tylko przez dostępną pamięć.

Przykład

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

Wstawia ciąg do pola listy.

int InsertString(
    int nIndex,
    LPCTSTR lpszItem);

Parametry

nIndex
Określa indeks zerowy pozycji, aby wstawić ciąg. Jeśli ten parametr to -1, ciąg zostanie dodany na końcu listy.

lpszItem
Wskazuje ciąg o wartości null, który ma zostać wstawiony.

Wartość zwracana

Indeks zerowy pozycji, w której wstawiono ciąg. Wartość zwracana jest LB_ERR wtedy, gdy wystąpi błąd. Zwracana wartość to LB_ERRSPACE , jeśli do przechowywania nowego ciągu jest za mało miejsca.

Uwagi

W przeciwieństwie do funkcji składowej AddString , InsertString nie powoduje sortowania listy ze LBS_SORT stylem.

Przykład

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

Określa element pola listy najbliższy punkt określony w ptelemencie .

UINT ItemFromPoint(
    CPoint pt,
    BOOL& bOutside) const;

Parametry

pt
Wskaż, dla którego chcesz znaleźć najbliższy element, określony względem lewego górnego rogu obszaru klienta pola listy.

bOutside
Odwołanie do zmiennej BOOL , która zostanie ustawiona na TRUE , jeśli pt znajduje się poza obszarem klienta pola listy, FALSE jeśli pt znajduje się wewnątrz obszaru klienta pola listy.

Wartość zwracana

Indeks najbliższego elementu do punktu określonego w ptelemencie .

Uwagi

Za pomocą tej funkcji można określić, który element pola listy przesuwa kursor myszy.

Przykład

Zobacz przykład dla elementu CListBox::SetAnchorIndex.

CListBox::MeasureItem

Wywoływana przez platformę po utworzeniu pola listy z stylem rysowania właściciela.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Parametry

lpMeasureItemStruct
Długi wskaźnik do MEASUREITEMSTRUCT struktury.

Uwagi

Domyślnie ta funkcja składowa nic nie robi. Zastąpi MEASUREITEMSTRUCT tę funkcję składową i wypełnij strukturę, aby poinformować system Windows o wymiarach pola listy. Jeśli pole listy zostanie utworzone przy użyciu LBS_OWNERDRAWVARIABLE stylu, struktura wywołuje tę funkcję składową dla każdego elementu w polu listy. W przeciwnym razie ten element członkowski jest wywoływany tylko raz.

Aby uzyskać więcej informacji na temat używania LBS_OWNERDRAWFIXED stylu w polu listy właściciel-rysunek utworzonym z SubclassDlgItem funkcją CWndskładową programu , zobacz dyskusję w notatce technicznej 14.

Zobacz CWnd::OnMeasureItem opis MEASUREITEMSTRUCT struktury.

Przykład

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

Usuwa wszystkie elementy z pola listy.

void ResetContent();

Przykład

// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);

CListBox::SelectString

Wyszukuje element pola listy, który pasuje do określonego ciągu, a jeśli zostanie znaleziony pasujący element, wybierze element.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszItem);

Parametry

nStartAfter
Zawiera indeks zerowy elementu przed przeszukanym pierwszym elementem. Gdy wyszukiwanie osiągnie dół pola listy, będzie kontynuowane z góry pola listy z powrotem do elementu określonego przez nStartAfter. Jeśli nStartAfter wartość to -1, całe pole listy jest wyszukiwane od początku.

lpszItem
Wskazuje ciąg zakończony na wartość null, który zawiera prefiks do wyszukania. Wyszukiwanie jest niezależne od wielkości liter, więc ten ciąg może zawierać dowolną kombinację wielkich i małych liter.

Wartość zwracana

Indeks wybranego elementu, jeśli wyszukiwanie zakończyło się pomyślnie. Jeśli wyszukiwanie nie powiodło się, zwracana wartość to LB_ERR , a bieżące zaznaczenie nie zostanie zmienione.

Uwagi

W razie potrzeby pole listy jest przewijane, aby przełączyć wybrany element do widoku.

Tej funkcji składowej nie można używać z polem listy, które ma LBS_MULTIPLESEL styl.

Element jest wybierany tylko wtedy, gdy jego znaki początkowe (od punktu początkowego) pasują do znaków w ciągu określonym przez lpszItem.

Użyj funkcji składowej FindString , aby znaleźć ciąg bez wybierania elementu.

Przykład

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

Wybiera wiele kolejnych elementów w polu listy wielokrotnego wyboru.

int SelItemRange(
    BOOL bSelect,
    int nFirstItem,
    int nLastItem);

Parametry

bSelect
Określa sposób ustawiania zaznaczenia. Jeśli bSelect element to TRUE, ciąg jest zaznaczony i wyróżniony; jeśli FALSE, wyróżnienie zostanie usunięte, a ciąg nie zostanie już wybrany.

nFirstItem
Określa indeks zerowy pierwszego elementu do ustawienia.

nLastItem
Określa indeks zerowy ostatniego elementu do ustawienia.

Wartość zwracana

LB_ERR jeśli wystąpi błąd.

Uwagi

Tej funkcji składowej należy używać tylko z polami listy wielokrotnego zaznaczenia. Jeśli musisz wybrać tylko jeden element w polu listy wielokrotnej zaznaczenia , czyli jeśli nFirstItem jest równa nLastItem , wywołaj SetSel funkcję składową.

Przykład

// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);

CListBox::SetAnchorIndex

Ustawia kotwicę w polu listy wielokrotnego wyboru, aby rozpocząć wybór rozszerzony.

void SetAnchorIndex(int nIndex);

Parametry

nIndex
Określa indeks zerowy elementu pola listy, który będzie kotwicą.

Uwagi

W polu listy wielokrotnej zaznaczenia element kotwicy jest pierwszym lub ostatnim elementem w bloku ciągłych zaznaczonych elementów.

Przykład

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

Ustawia prostokąt fokusu na element w określonym indeksie w polu listy wielokrotnego wyboru.

int SetCaretIndex(
    int nIndex,
    BOOL bScroll = TRUE);

Parametry

nIndex
Określa indeks zerowy elementu, aby otrzymać prostokąt fokusu w polu listy.

bScroll
Jeśli ta wartość wynosi 0, element jest przewijany, dopóki nie będzie w pełni widoczny. Jeśli ta wartość nie jest równa 0, element jest przewijany, dopóki nie będzie co najmniej częściowo widoczny.

Wartość zwracana

LB_ERR jeśli wystąpi błąd.

Uwagi

Jeśli element nie jest widoczny, jest przewijany do widoku.

Przykład

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

Ustawia szerokość we wszystkich kolumnach w polu listy wielokolumnowej (utworzoną przy użyciu LBS_MULTICOLUMN stylu).

void SetColumnWidth(int cxWidth);

Parametry

cxWidth
Określa szerokość w pikselach wszystkich kolumn.

Przykład

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

Wybiera ciąg i w razie potrzeby przewija go do widoku.

int SetCurSel(int nSelect);

Parametry

nSelect
Określa indeks zerowy ciągu do wybrania. Jeśli nSelect ma wartość -1, pole listy nie ma zaznaczenia.

Wartość zwracana

LB_ERR jeśli wystąpi błąd.

Uwagi

Po wybraniu nowego ciągu pole listy usuwa wyróżnienie z wcześniej wybranego ciągu.

Tej funkcji składowej należy używać tylko w polach listy z pojedynczym zaznaczeniem.

Aby ustawić lub usunąć zaznaczenie w polu listy wielokrotnego wyboru, użyj polecenia CListBox::SetSel.

Przykład

// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
   m_myListBox.SetCurSel(nCount - 1);

CListBox::SetHorizontalExtent

Ustawia szerokość w pikselach, za pomocą których pole listy można przewijać w poziomie.

void SetHorizontalExtent(int cxExtent);

Parametry

cxExtent
Określa liczbę pikseli, za pomocą których pole listy można przewijać w poziomie.

Uwagi

Jeśli rozmiar pola listy jest mniejszy niż ta wartość, poziomy pasek przewijania będzie przewijać elementy w poziomie w polu listy. Jeśli pole listy jest tak duże lub większe niż ta wartość, pasek przewijania poziomego jest ukryty.

Aby odpowiedzieć na wywołanie SetHorizontalExtentmetody , pole listy musi być zdefiniowane za pomocą WS_HSCROLL stylu.

Ta funkcja składowa nie jest przydatna w przypadku pól listy wielokolumnowej. W przypadku pól listy wielokolumnowej wywołaj funkcję składową SetColumnWidth .

Przykład

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

Ustawia wartość skojarzona z określonym elementem w polu listy.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

Parametry

nIndex
Określa indeks zerowy elementu.

dwItemData
Określa wartość, która ma być skojarzona z elementem.

Wartość zwracana

LB_ERR jeśli wystąpi błąd.

Przykład

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

Ustawia wartość 32-bitową skojarzona z określonym elementem w polu listy jako określony wskaźnik ( void *).

int SetItemDataPtr(
    int nIndex,
    void* pData);

Parametry

nIndex
Określa indeks zerowy elementu.

pData
Określa wskaźnik, który ma być skojarzony z elementem.

Wartość zwracana

LB_ERR jeśli wystąpi błąd.

Uwagi

Ten wskaźnik pozostaje prawidłowy dla okresu życia pola listy, mimo że pozycja względna elementu w polu listy może ulec zmianie w miarę dodawania lub usuwania elementów. W związku z tym indeks elementu w polu może ulec zmianie, ale wskaźnik pozostaje niezawodny.

Przykład

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

Ustawia wysokość elementów w polu listy.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

Parametry

nIndex
Określa indeks zerowy elementu w polu listy. Ten parametr jest używany tylko wtedy, gdy pole listy ma LBS_OWNERDRAWVARIABLE styl. W przeciwnym razie należy ustawić wartość 0.

cyItemHeight
Określa wysokość elementu w pikselach.

Wartość zwracana

LB_ERR jeśli indeks lub wysokość są nieprawidłowe.

Uwagi

Jeśli pole listy ma LBS_OWNERDRAWVARIABLE styl, ta funkcja ustawia wysokość elementu określonego przez nIndex. W przeciwnym razie ta funkcja ustawia wysokość wszystkich elementów w polu listy.

Przykład

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

Ustawia identyfikator ustawień regionalnych dla tego pola listy.

LCID SetLocale(LCID nNewLocale);

Parametry

nNewLocale
Nowa wartość identyfikatora ustawień regionalnych (LCID) ustawiona dla pola listy.

Wartość zwracana

Poprzednia wartość identyfikatora ustawień regionalnych (LCID) dla tego pola listy.

Uwagi

Jeśli SetLocale nie jest wywoływana, domyślne ustawienia regionalne są uzyskiwane z systemu. Domyślne ustawienia regionalne systemu można modyfikować przy użyciu aplikacji regionalnej (lub międzynarodowej) Panel sterowania.

Przykład

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

Wybiera ciąg w polu listy wielokrotnego wyboru.

int SetSel(
    int nIndex,
    BOOL bSelect = TRUE);

Parametry

nIndex
Zawiera indeks zerowy ciągu, który ma zostać ustawiony. Jeśli wartość -1, zaznaczenie zostanie dodane do lub usunięte ze wszystkich ciągów, w zależności od wartości bSelect.

bSelect
Określa sposób ustawiania zaznaczenia. Jeśli bSelect element to TRUE, ciąg jest zaznaczony i wyróżniony; jeśli FALSE, wyróżnienie zostanie usunięte, a ciąg nie zostanie już wybrany. Określony ciąg jest zaznaczony i wyróżniony domyślnie.

Wartość zwracana

LB_ERR jeśli wystąpi błąd.

Uwagi

Tej funkcji składowej należy używać tylko z polami listy wielokrotnego zaznaczenia.

Aby wybrać element z pola listy z jednym wyborem, użyj polecenia CListBox::SetCurSel.

Przykład

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

Ustawia pozycje tabulatora w polu listy.

void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);

BOOL SetTabStops(
    int nTabStops,
    LPINT rgTabStops);

Parametry

cxEachStop
Zatrzymanie karty jest ustawiane w każdej cxEachStop lekcji okna dialogowego. Zobacz rgTabStops opis jednostki okna dialogowego.

nTabStops
Określa liczbę zatrzymań tabulatorów w polu listy.

rgTabStops
Wskazuje pierwszy element członkowski tablicy liczb całkowitych zawierających pozycje tabulatora w jednostkach dialogowych. Jednostka okna dialogowego to odległość pozioma lub pionowa. Jedna jednostka okna dialogowego poziomego jest równa jednej czwartej bieżącej jednostki szerokości bazowej okna dialogowego, a jedna pionowa jednostka okna dialogowego jest równa jednej ósmej bieżącej jednostki wysokości bazowej okna dialogowego. Jednostki podstawowe okna dialogowego są obliczane na podstawie wysokości i szerokości bieżącej czcionki systemowej. Funkcja GetDialogBaseUnits systemu Windows zwraca bieżące jednostki podstawowe okna dialogowego w pikselach. Tabulatory muszą być sortowane w kolejności rosnącej; karty wstecz są niedozwolone.

Wartość zwracana

Nonzero, jeśli wszystkie karty zostały ustawione; w przeciwnym razie 0.

Uwagi

Aby ustawić tabulator zatrzymuje się do domyślnego rozmiaru 2 jednostek okna dialogowego, wywołaj bez parametrów wersję tej funkcji składowej. Aby ustawić tabulator zatrzymuje rozmiar inny niż 2, wywołaj wersję z argumentem cxEachStop .

Aby ustawić tabulator zatrzymuje się na tablicy rozmiarów, użyj wersji z rgTabStops argumentami i nTabStops . Dla każdej wartości w rgTabStopselemecie zostanie ustawiona wartość tabulatora do liczby określonej przez nTabStopswartość .

Aby odpowiedzieć na wywołanie funkcji składowej SetTabStops , pole listy musi zostać utworzone przy użyciu LBS_USETABSTOPS stylu.

Przykład

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

Gwarantuje, że określony element pola listy jest widoczny.

int SetTopIndex(int nIndex);

Parametry

nIndex
Określa indeks zerowy elementu pola listy.

Wartość zwracana

Zero w przypadku powodzenia lub LB_ERR wystąpienia błędu.

Uwagi

System przewija pole listy do momentu wyświetlenia elementu określonego przez nIndex w górnej części pola listy lub osiągnięcia maksymalnego zakresu przewijania.

Przykład

// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);

CListBox::VKeyToItem

Wywoływana przez platformę, gdy okno nadrzędne pola listy odbiera WM_VKEYTOITEM komunikat z pola listy.

virtual int VKeyToItem(
    UINT nKey,
    UINT nIndex);

Parametry

nKey
Kod klucza wirtualnego klucza naciśnięcia przez użytkownika. Aby uzyskać listę standardowych kodów kluczy wirtualnych, zobacz Winuser.h

nIndex
Bieżąca pozycja karetki pola listy.

Wartość zwracana

Zwraca wartość — 2 dla żadnej kolejnej akcji, — 1 dla akcji domyślnej lub liczby nienależącej do określenia indeksu elementu pola listy, na którym ma być wykonywana domyślna akcja naciśnięcia.

Uwagi

Komunikat WM_VKEYTOITEM jest wysyłany przez pole listy po odebraniu komunikatu WM_KEYDOWN , ale tylko wtedy, gdy pole listy spełnia oba następujące elementy:

Nigdy nie należy wywoływać tej funkcji samodzielnie. Zastąp tę funkcję, aby zapewnić własną niestandardową obsługę komunikatów klawiaturowych.

Musisz zwrócić wartość, aby poinformować platformę o tym, jaką akcję wykonała przesłonięć. Wartość zwracana — 2 wskazuje, że aplikacja obsłużyła wszystkie aspekty wybierania elementu i nie wymaga dalszych działań według pola listy. Przed zwróceniem wartości - 2 można ustawić zaznaczenie lub przenieść daszek lub oba te elementy. Aby ustawić zaznaczenie, użyj polecenia SetCurSel lub SetSel. Aby przenieść daszek, użyj polecenia SetCaretIndex.

Wartość zwracana — 1 wskazuje, że pole listy powinno wykonać domyślną akcję w odpowiedzi na naciśnięcie. Domyślna implementacja zwraca wartość - 1.

Wartość zwracana 0 lub większa określa indeks elementu w polu listy i wskazuje, że pole listy powinno wykonać domyślną akcję naciśnięcia na danym elemencie.

Przykład

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

Zobacz też

Przykład MFC CTRLTEST
CWnd Klasa
Wykres hierarchii
CWnd Klasa
CButton Klasa
CComboBox Klasa
CEdit Klasa
CScrollBar Klasa
CStatic Klasa