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 CListBox
klasy . 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 CDialog
klasy ), 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 maLBS_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 maLBS_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 maLBS_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, otrzymujeWM_CHAR
komunikat.ON_WM_VKEYTOITEM
Pole listy zeLBS_WANTKEYBOARDINPUT
stylemWM_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
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 Create
metodę , która inicjuje pole listy systemu Windows i dołącza go do CListBox
obiektu.
Podczas Create
wykonywania system Windows wysyła WM_NCCREATE
komunikaty , WM_CREATE
, WM_NCCALCSIZE
i WM_GETMINMAXINFO
do kontrolki pola listy.
Te komunikaty są domyślnie obsługiwane przez OnNcCreate
funkcje składowe , OnCreate
, OnNcCalcSize
i OnGetMinMaxInfo
w klasie bazowej CWnd
. Aby rozszerzyć domyślną obsługę komunikatów, należy utworzyć klasę z CListBox
klasy , dodać mapę komunikatów do nowej klasy i zastąpić poprzednie funkcje składowe programu obsługi komunikatów. Zastąpij OnCreate
na przykład , aby wykonać wymaganą inicjację dla nowej klasy.
Zastosuj następujące style okna do kontrolki pola listy.
WS_CHILD
ZawszeWS_VISIBLE
ZwykleWS_DISABLED
RzadkoWS_VSCROLL
Aby dodać pionowy pasek przewijaniaWS_HSCROLL
Aby dodać poziomy pasek przewijaniaWS_GROUP
Aby grupować kontrolkiWS_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::GetStatus
lub 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 AddString
funkcje , InsertString
i 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 pt
elemencie .
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 pt
elemencie .
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ą CWnd
skł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 SetHorizontalExtent
metody , 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 rgTabStops
elemecie zostanie ustawiona wartość tabulatora do liczby określonej przez nTabStops
wartość .
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:
LBS_WANTKEYBOARDINPUT
Ma zestaw 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.
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