CComboBox
Klasa
Udostępnia funkcje pola kombi systemu Windows.
Składnia
class CComboBox : public CWnd
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CComboBox::CComboBox |
CComboBox Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CComboBox::AddString |
Dodaje ciąg na końcu listy w polu listy pola kombi lub na posortowanej pozycji pól listy ze stylem CBS_SORT . |
CComboBox::Clear |
Usuwa (czyści) bieżące zaznaczenie, jeśli istnieje, w kontrolce edycji. |
CComboBox::CompareItem |
Wywoływana przez platformę w celu określenia względnej pozycji nowego elementu listy w posortowanym polu kombi rysowanym przez właściciela. |
CComboBox::Copy |
Kopiuje bieżące zaznaczenie, jeśli istnieje, do Schowka w CF_TEXT formacie. |
CComboBox::Create |
Tworzy pole kombi i dołącza je do CComboBox obiektu. |
CComboBox::Cut |
Usuwa (wycina) bieżące zaznaczenie, jeśli istnieje, w kontrolce edycji i kopiuje usunięty tekst do Schowka w CF_TEXT formacie. |
CComboBox::DeleteItem |
Wywoływana przez platformę, gdy element listy zostanie usunięty z pola kombi rysowanego przez właściciela. |
CComboBox::DeleteString |
Usuwa ciąg z pola listy pola kombi. |
CComboBox::Dir |
Dodaje listę nazw plików do pola listy pola kombi. |
CComboBox::DrawItem |
Wywoływana przez strukturę, gdy zmienia się wizualny aspekt pola kombi rysowanego przez właściciela. |
CComboBox::FindString |
Znajduje pierwszy ciąg zawierający określony prefiks w polu listy pola kombi. |
CComboBox::FindStringExact |
Znajduje pierwszy ciąg pola listy (w polu kombi), który pasuje do określonego ciągu. |
CComboBox::GetComboBoxInfo |
Pobiera informacje o CComboBox obiekcie. |
CComboBox::GetCount |
Pobiera liczbę elementów w polu listy pola kombi. |
CComboBox::GetCueBanner |
Pobiera tekst cue wyświetlany dla kontrolki pola kombi. |
CComboBox::GetCurSel |
Pobiera indeks aktualnie wybranego elementu, jeśli istnieje, w polu listy pola kombi. |
CComboBox::GetDroppedControlRect |
Pobiera współrzędne ekranu widocznego pola listy listy (rozwijanej) pola kombi listy rozwijanej. |
CComboBox::GetDroppedState |
Określa, czy pole listy pola kombi listy rozwijanej jest widoczne (porzucane). |
CComboBox::GetDroppedWidth |
Pobiera minimalną dozwoloną szerokość dla części listy rozwijanej pola kombi. |
CComboBox::GetEditSel |
Pobiera pozycje znaków początkowych i końcowych bieżącego zaznaczenia w kontrolce edycji pola kombi. |
CComboBox::GetExtendedUI |
Określa, czy pole kombi ma domyślny interfejs użytkownika, czy rozszerzony interfejs użytkownika. |
CComboBox::GetHorizontalExtent |
Zwraca szerokość w pikselach, którą część pola kombi można przewijać w poziomie. |
CComboBox::GetItemData |
Pobiera podaną przez aplikację wartość 32-bitową skojarzona z określonym elementem pola kombi. |
CComboBox::GetItemDataPtr |
Pobiera dostarczony przez aplikację wskaźnik 32-bitowy skojarzony z określonym elementem pola kombi. |
CComboBox::GetItemHeight |
Pobiera wysokość elementów listy w polu kombi. |
CComboBox::GetLBText |
Pobiera ciąg z pola listy pola kombi. |
CComboBox::GetLBTextLen |
Pobiera długość ciągu w polu listy pola kombi. |
CComboBox::GetLocale |
Pobiera identyfikator ustawień regionalnych dla pola kombi. |
CComboBox::GetMinVisible |
Pobiera minimalną liczbę widocznych elementów na liście rozwijanej bieżącego pola kombi. |
CComboBox::GetTopIndex |
Zwraca indeks pierwszego widocznego elementu w części pola listy pola kombi. |
CComboBox::InitStorage |
Wstępnie przydziela bloki pamięci dla elementów i ciągów w części pola listy pola kombi. |
CComboBox::InsertString |
Wstawia ciąg do pola listy pola kombi. |
CComboBox::LimitText |
Ogranicza długość tekstu, który użytkownik może wprowadzić w kontrolce edycji pola kombi. |
CComboBox::MeasureItem |
Wywoływana przez strukturę w celu określenia wymiarów pola kombi podczas tworzenia pola kombi rysowanego przez właściciela. |
CComboBox::Paste |
Wstawia dane ze Schowka do kontrolki edycji na bieżącym położeniu kursora. Dane są wstawiane tylko wtedy, gdy Schowek zawiera dane w CF_TEXT formacie. |
CComboBox::ResetContent |
Usuwa wszystkie elementy z pola listy i edytuje kontrolkę pola kombi. |
CComboBox::SelectString |
Wyszukuje ciąg w polu listy pola kombi, a jeśli ciąg zostanie znaleziony, wybierze ciąg w polu listy i skopiuje ciąg do kontrolki edycji. |
CComboBox::SetCueBanner |
Ustawia tekst wskazówek wyświetlany dla kontrolki pola kombi. |
CComboBox::SetCurSel |
Wybiera ciąg w polu listy pola kombi. |
CComboBox::SetDroppedWidth |
Ustawia minimalną dozwoloną szerokość dla części listy rozwijanej pola kombi. |
CComboBox::SetEditSel |
Wybiera znaki w kontrolce edycji pola kombi. |
CComboBox::SetExtendedUI |
Wybiera domyślny interfejs użytkownika lub rozszerzony interfejs użytkownika dla pola kombi, które ma CBS_DROPDOWN styl lub CBS_DROPDOWNLIST . |
CComboBox::SetHorizontalExtent |
Ustawia szerokość w pikselach, którą część pola kombi można przewijać w poziomie. |
CComboBox::SetItemData |
Ustawia wartość 32-bitową skojarzona z określonym elementem w polu kombi. |
CComboBox::SetItemDataPtr |
Ustawia wskaźnik 32-bitowy skojarzony z określonym elementem w polu kombi. |
CComboBox::SetItemHeight |
Ustawia wysokość elementów listy w polu kombi lub wysokość części kontrolki edycji (lub statycznego tekstu) pola kombi. |
CComboBox::SetLocale |
Ustawia identyfikator ustawień regionalnych dla pola kombi. |
CComboBox::SetMinVisibleItems |
Ustawia minimalną liczbę widocznych elementów na liście rozwijanej bieżącego pola kombi. |
CComboBox::SetTopIndex |
Informuje część pola listy pola kombi, aby wyświetlić element z określonym indeksem u góry. |
CComboBox::ShowDropDown |
Wyświetla lub ukrywa pole listy pola kombi, które ma CBS_DROPDOWN styl lub CBS_DROPDOWNLIST . |
Uwagi
Pole kombi składa się z pola listy połączonego ze statyczną kontrolką lub kontrolką edycji. Część kontrolki w polu listy może być wyświetlana przez cały czas lub może być wyświetlana tylko wtedy, gdy użytkownik wybierze strzałkę listy rozwijanej obok kontrolki.
Aktualnie wybrany element (jeśli istnieje) w polu listy jest wyświetlany w kontrolce statycznej lub edycji. Ponadto jeśli pole kombi ma styl listy rozwijanej, użytkownik może wpisać początkowy znak jednego z elementów na liście, a pole listy, jeśli jest widoczne, będzie wyróżniać następny element z tym początkowym znakiem.
W poniższej tabeli porównaliśmy trzy style pola kombi.
Styl | Gdy pole listy jest widoczne | Kontrolka statyczna lub edytowana |
---|---|---|
Uproszczony | Zawsze | Edytuj |
Rozwijana | Po usunięciu | Edytuj |
Drop-down list | Po usunięciu | Static |
Obiekt można utworzyć CComboBox
na podstawie szablonu okna dialogowego lub bezpośrednio w kodzie. W obu przypadkach najpierw wywołaj konstruktora CComboBox
, aby skonstruować CComboBox
obiekt, a następnie wywołaj Create
funkcję składową, aby utworzyć kontrolkę i dołączyć ją do CComboBox
obiektu.
Jeśli chcesz obsługiwać komunikaty powiadomień systemu Windows wysyłane przez pole kombi do elementu nadrzędnego (zazwyczaj klasy pochodzącej z CDialog
klasy ), dodaj funkcję elementu członkowskiego mapy komunikatów i elementu członkowskiego 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 kombi wysyłającej powiadomienie i memberFxn
jest nazwą nadrzędnej funkcji składowej, która została zapisana w celu obsługi powiadomienia.
Prototyp funkcji elementu nadrzędnego jest następujący:
afx_msg void memberFxn( );
Nie można przewidzieć kolejności wysyłania określonych powiadomień. W szczególności CBN_SELCHANGE
powiadomienie może wystąpić przed powiadomieniem lub po nim CBN_CLOSEUP
.
Potencjalne wpisy mapy komunikatów są następujące:
ON_CBN_CLOSEUP
(System Windows 3.1 lub nowszy). Pole listy pola kombi zostało zamknięte. Ten komunikat powiadomienia nie jest wysyłany dla pola kombi, które maCBS_SIMPLE
styl.ON_CBN_DBLCLK
Użytkownik klika dwukrotnie ciąg w polu listy pola kombi. Ten komunikat powiadomienia jest wysyłany tylko dla pola kombi ze stylemCBS_SIMPLE
. W przypadku pola kombi zCBS_DROPDOWN
stylem lubCBS_DROPDOWNLIST
nie można kliknąć dwukrotnie, ponieważ pojedyncze kliknięcie powoduje ukrycie pola listy.ON_CBN_DROPDOWN
Pole listy pola kombi ma zostać wyświetlone (być widoczne). Ten komunikat powiadomienia może wystąpić tylko dla pola kombi z stylemCBS_DROPDOWN
lubCBS_DROPDOWNLIST
.ON_CBN_EDITCHANGE
Użytkownik podjął akcję, która mogła zmienić tekst w części kontrolki edycji pola kombi. W przeciwieństwie do komunikatuCBN_EDITUPDATE
ta wiadomość jest wysyłana po zaktualizowaniu ekranu przez system Windows. Nie jest wysyłany, jeśli pole kombi maCBS_DROPDOWNLIST
styl.ON_CBN_EDITUPDATE
Część kontrolki edycji pola kombi ma wyświetlać zmieniony tekst. Ta wiadomość powiadomienia jest wysyłana po sformatowaniu tekstu przez kontrolkę, ale przed wyświetleniem tekstu. Nie jest wysyłany, jeśli pole kombi maCBS_DROPDOWNLIST
styl.ON_CBN_ERRSPACE
Pole kombi nie może przydzielić wystarczającej ilości pamięci, aby spełnić określone żądanie.ON_CBN_SELENDCANCEL
(System Windows 3.1 lub nowszy). Wskazuje, że wybór użytkownika powinien zostać anulowany. Użytkownik klika element, a następnie klika kolejne okno lub kontrolkę, aby ukryć pole listy pola kombi. Ten komunikat powiadomienia jest wysyłany przed komunikatemCBN_CLOSEUP
powiadomienia, aby wskazać, że wybór użytkownika powinien zostać zignorowany. WiadomośćCBN_SELENDCANCEL
lub powiadomienie jest wysyłana nawet wtedy, gdyCBN_CLOSEUP
wiadomość z powiadomieniem nie jest wysyłana (tak jak w przypadku pola kombi ze stylemCBS_SIMPLE
).CBN_SELENDOK
ON_CBN_SELENDOK
Użytkownik wybiera element, a następnie naciska ENTER lub klika STRZAŁKA W DÓŁ, aby ukryć pole listy pola kombi. Ta wiadomość powiadomienia jest wysyłana przed komunikatemCBN_CLOSEUP
, aby wskazać, że wybór użytkownika powinien być uznawany za prawidłowy. WiadomośćCBN_SELENDCANCEL
lub powiadomienie jest wysyłana nawet wtedy, gdyCBN_CLOSEUP
wiadomość z powiadomieniem nie jest wysyłana (tak jak w przypadku pola kombi ze stylemCBS_SIMPLE
).CBN_SELENDOK
ON_CBN_KILLFOCUS
Pole kombi traci fokus wejściowy.ON_CBN_SELCHANGE
Wybór w polu listy pola kombi zostanie zmieniony w wyniku kliknięcia użytkownika w polu listy lub zmiany zaznaczenia przy użyciu strzałek. Podczas przetwarzania tego komunikatu tekst w kontrolce edycji pola kombi można pobrać tylko za pośrednictwemGetLBText
lub innej podobnej funkcji.GetWindowText
nie można użyć.ON_CBN_SETFOCUS
Pole kombi odbiera fokus wejściowy.
Jeśli utworzysz CComboBox
obiekt w oknie dialogowym (za pomocą zasobu okna dialogowego), CComboBox
obiekt zostanie automatycznie zniszczony, gdy użytkownik zamknie okno dialogowe.
Jeśli osadzasz CComboBox
obiekt w innym obiekcie okna, nie musisz go zniszczyć. Jeśli utworzysz CComboBox
obiekt na stosie, zostanie on zniszczony automatycznie. Jeśli utworzysz CComboBox
obiekt na stercie przy użyciu new
funkcji, musisz wywołać delete
obiekt, aby go zniszczyć, gdy pole kombi systemu Windows zostanie zniszczone.
Uwaga Jeśli chcesz obsługiwać WM_KEYDOWN
komunikaty i WM_CHAR
komunikaty, musisz podklasować kontrolki pól edycji i listy pól kombi, wyprowadzać klasy z CEdit
i CListBox
i i dodawać programy obsługi dla tych komunikatów do klas pochodnych. Aby uzyskać więcej informacji, zobacz CWnd::SubclassWindow
.
Hierarchia dziedziczenia
CComboBox
Wymagania
Nagłówek: afxwin.h
CComboBox::AddString
Dodaje ciąg do pola listy pola kombi.
int AddString(LPCTSTR lpszString);
Parametry
lpszString
Wskazuje ciąg zakończony na wartość null, który ma zostać dodany.
Wartość zwracana
Jeśli wartość zwracana jest większa lub równa 0, jest to indeks oparty na zerach do ciągu w polu listy. Wartość zwracana jest CB_ERR
wtedy, gdy wystąpi błąd. Zwracana wartość to CB_ERRSPACE
, jeśli do przechowywania nowego ciągu jest za mało miejsca.
Uwagi
Jeśli pole listy nie zostało utworzone ze stylem CBS_SORT
, ciąg zostanie dodany na końcu listy. W przeciwnym razie ciąg zostanie wstawiony do listy, a lista zostanie posortowana.
Uwaga
Ta funkcja nie jest obsługiwana przez kontrolkę systemu Windows ComboBoxEx
. Aby uzyskać więcej informacji na temat tej kontrolki, zobacz ComboBoxEx
Kontrolki w zestawie Windows SDK.
Aby wstawić ciąg do określonej lokalizacji na liście, użyj funkcji składowej InsertString
.
Przykład
// Add 20 items to the combo box.
CString str;
for (int i = 0; i < 20; i++)
{
str.Format(_T("item string %d"), i);
m_pComboBox->AddString(str);
}
CComboBox::CComboBox
CComboBox
Tworzy obiekt.
CComboBox();
Przykład
// Declare a local CComboBox object.
CComboBox myComboBox;
// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;
CComboBox::Clear
Usuwa (czyści) bieżące zaznaczenie, jeśli istnieje, w kontrolce edycji pola kombi.
void Clear();
Uwagi
Aby usunąć bieżące zaznaczenie i umieścić usuniętą zawartość w Schowku, użyj funkcji składowej Cut
.
Przykład
// Delete all of the text from the combo box's edit control.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Clear();
CComboBox::CompareItem
Wywoływana przez strukturę w celu określenia względnej pozycji nowego elementu w części pola listy posortowanego pola kombi właściciel-rysowanie.
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
, aby zapoznać się z opisem elementu COMPAREITEMSTRUCT
.
Uwagi
Domyślnie ta funkcja składowa nic nie robi. Jeśli utworzysz pole kombi owner-draw z LBS_SORT
stylem, musisz zastąpić tę funkcję składową, aby ułatwić strukturę sortowania nowych elementów dodanych do pola listy.
Przykład
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example compares two items using strcmp to sort items in reverse
// alphabetical order. The combo box control was created with the
// following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
int CMyComboBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
int iComp = 0;
ASSERT(lpCompareItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
ASSERT(lpszText1 != NULL);
LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
ASSERT(lpszText2 != NULL);
if (NULL != lpszText1 && NULL != lpszText2)
{
iComp = _tcscmp(lpszText2, lpszText1);
}
return iComp;
}
CComboBox::Copy
Kopiuje bieżące zaznaczenie, jeśli istnieje, w kontrolce edycji pola kombi na Schowek w CF_TEXT
formacie.
void Copy();
Przykład
// Copy all of the text from the combo box's edit control
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Copy();
CComboBox::Create
Tworzy pole kombi i dołącza je do CComboBox
obiektu.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parametry
dwStyle
Określa styl pola kombi. Zastosuj dowolną kombinację stylów pola kombi do pola.
rect
Wskazuje położenie i rozmiar pola kombi. Może być strukturą RECT
lub obiektem.CRect
pParentWnd
Określa okno nadrzędne pola kombi (zazwyczaj CDialog
). Nie może to być NULL
.
nID
Określa identyfikator kontrolki pola kombi.
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.
Uwagi
Obiekt jest konstruowany CComboBox
w dwóch krokach. Najpierw wywołaj konstruktor, a następnie wywołaj Create
metodę , która tworzy pole kombi systemu Windows i dołącza je do CComboBox
obiektu.
Podczas Create
wykonywania system Windows wysyła WM_NCCREATE
komunikaty , WM_CREATE
, WM_NCCALCSIZE
i WM_GETMINMAXINFO
do pola kombi.
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 CComboBox
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 kombi. :
WS_CHILD
ZawszeWS_VISIBLE
ZwykleWS_DISABLED
RzadkoWS_VSCROLL
Aby dodać pionowe przewijanie pola listy w polu kombiWS_HSCROLL
Aby dodać poziome przewijanie pola listy w polu kombiWS_GROUP
Aby grupować kontrolkiWS_TABSTOP
Aby uwzględnić pole kombi w kolejności tabulacji
Przykład
m_pComboBox->Create(
WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
CRect(10, 10, 200, 100), pParentWnd, 1);
CComboBox::Cut
Usuwa (wycina) bieżące zaznaczenie, jeśli istnieje, w kontrolce edycji pola kombi i kopiuje usunięty tekst do Schowka w CF_TEXT
formacie.
void Cut();
Uwagi
Aby usunąć bieżące zaznaczenie bez umieszczania usuniętego tekstu w Schowku, wywołaj funkcję składową Clear
.
Przykład
// Delete all of the text from the combo box's edit control and copy it
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Cut();
CComboBox::DeleteItem
Wywoływana przez platformę, gdy użytkownik usuwa element z obiektu rysowania CComboBox
właściciela lub niszczy pole kombi.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Parametry
lpDeleteItemStruct
Długi wskaźnik struktury systemu Windows DELETEITEMSTRUCT
zawierający informacje o usuniętym elemencie. Zobacz CWnd::OnDeleteItem
opis tej struktury.
Uwagi
Domyślna implementacja tej funkcji nic nie robi. Zastąpi tę funkcję, aby ponownie wyrysować pole kombi zgodnie z potrzebami.
Przykład
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example simply dumps the item's text. The combo box control was
// created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
ASSERT(lpDeleteItemStruct->CtlType == ODT_COMBOBOX);
LPTSTR lpszText = (LPTSTR)lpDeleteItemStruct->itemData;
ASSERT(lpszText != NULL);
AFXDUMP(lpszText);
}
CComboBox::DeleteString
Usuwa element w pozycji nIndex
z pola kombi.
int DeleteString(UINT nIndex);
Parametry
nIndex
Określa indeks do ciągu, który ma zostać usunięty.
Wartość zwracana
Jeśli wartość zwracana jest większa lub równa 0, jest to liczba ciągów pozostałych na liście. Wartość zwracana to CB_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 kombi 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 item from the combo box.
for (int i = m_pComboBox->GetCount() - 1; i >= 0; i--)
{
m_pComboBox->DeleteString(i);
}
CComboBox::Dir
Dodaje listę nazw plików lub dysków do pola listy pola kombi.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Parametry
attr
Może być dowolną kombinacją enum
wartości opisanych w CFile::GetStatus
pliku lub dowolnej kombinacji następujących wartości:
DDL_READWRITE
Plik może być odczytywany lub zapisywany.DDL_READONLY
Plik można odczytać, ale nie zapisywać.DDL_HIDDEN
Plik jest ukryty i nie jest wyświetlany na liście katalogów.DDL_SYSTEM
Plik jest plikiem systemowym.DDL_DIRECTORY
Nazwa określona przezlpszWildCard
określa katalog.DDL_ARCHIVE
Plik został zarchiwizowany.DDL_DRIVES
Uwzględnij wszystkie dyski zgodne z nazwą określoną przezlpszWildCard
.DDL_EXCLUSIVE
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
Jeśli wartość zwracana jest większa lub równa 0, jest to indeks zerowy ostatniego pliku dodanego do listy. Wartość zwracana jest CB_ERR
w przypadku wystąpienia błędu. Zwracana wartość to CB_ERRSPACE
, jeśli do przechowywania nowych ciągów jest za mało miejsca.
Uwagi
Ta funkcja nie jest obsługiwana przez kontrolkę systemu Windows ComboBoxEx
. Aby uzyskać więcej informacji na temat tej kontrolki, zobacz ComboBoxEx
Kontrolki w zestawie Windows SDK.
Przykład
// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
VERIFY(0 < ::GetWindowsDirectory(lpszWinPath, MAX_PATH));
// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);
m_pComboBox->ResetContent();
m_pComboBox->Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));
// Reset the current directory to its previous path.
::SetCurrentDirectory(lpszOldPath);
CComboBox::DrawItem
Wywoływana przez platformę, gdy zmienia się wizualny aspekt pola kombi właściciela rysowania.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parametry
lpDrawItemStruct
Wskaźnik do DRAWITEMSTRUCT
struktury zawierającej informacje o wymaganym typie rysunku.
Uwagi
Element itemAction
członkowski DRAWITEMSTRUCT
struktury definiuje akcję rysunku, która ma zostać wykonana. Zobacz CWnd::OnDrawItem
opis tej struktury.
Domyślnie ta funkcja składowa nic nie robi. Zastąpi tę funkcję składową, aby zaimplementować rysunek dla obiektu rysowania CComboBox
właściciela. Zanim ta funkcja składowa zakończy działanie, aplikacja powinna przywrócić wszystkie obiekty interfejsu urządzenia graficznego (GDI) wybrane dla kontekstu wyświetlania podanego w elemencie lpDrawItemStruct
.
Przykład
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example draws an item's text centered vertically and horizontally. The
// combo box control was created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Erase
// the rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction & ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
CComboBox::FindString
Znajduje, ale nie wybiera, pierwszy ciąg zawierający określony prefiks w polu listy pola kombi.
int FindString(
int nStartAfter,
LPCTSTR lpszString) 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 wartość -1, całe pole listy jest wyszukiwane od początku.
lpszString
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
Jeśli wartość zwracana jest większa lub równa 0, jest to indeks zerowy pasującego elementu. Jest to CB_ERR
, jeśli wyszukiwanie nie powiodło się.
Uwagi
Ta funkcja nie jest obsługiwana przez kontrolkę systemu Windows ComboBoxEx
. Aby uzyskać więcej informacji na temat tej kontrolki, zobacz ComboBoxEx
Kontrolki w zestawie Windows SDK.
Przykład
// The string to match.
LPCTSTR lpszmyString = _T("item");
// Delete all items that begin with the specified string.
int nItem = 0;
while ((nItem = m_pComboBox->FindString(nItem, lpszmyString)) != CB_ERR)
{
m_pComboBox->DeleteString(nItem);
}
CComboBox::FindStringExact
Wywołaj FindStringExact
funkcję składową, aby znaleźć pierwszy ciąg pola listy (w polu kombi), który pasuje do ciągu określonego w elemencie 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 ten ciąg może zawierać dowolną kombinację wielkich i małych liter.
Wartość zwracana
Indeks oparty na zerze pasującego elementu lub CB_ERR
jeśli wyszukiwanie nie powiodło się.
Uwagi
Jeśli pole kombi zostało utworzone przy użyciu stylu rysowania właściciela, ale bez CBS_HASSTRINGS
stylu, FindStringExact
próbuje dopasować wartość doubleword względem wartości lpszFind.
Przykład
// The string to match.
LPCTSTR lpszmyExactString = _T("item 5");
// Delete all items that exactly match the specified string.
int nDex = 0;
while ((nDex = m_pComboBox->FindStringExact(nDex, lpszmyExactString)) != CB_ERR)
{
m_pComboBox->DeleteString(nDex);
}
CComboBox::GetComboBoxInfo
Pobiera informacje dotyczące CComboBox
obiektu.
BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;
Parametry
*pcbi*<br/> A pointer to the [
COMBOBOXINFO'](/windows/win32/api/winuser/ns-winuser-comboboxinfo).
Wartość zwracana
Zwraca powodzenie TRUE
po FALSE
niepowodzeniu.
Uwagi
Ta funkcja składowa emuluje funkcjonalność komunikatu CB_GETCOMBOBOXINFO
zgodnie z opisem w zestawie WINDOWS SDK.
CComboBox::GetCount
Wywołaj tę funkcję składową, aby pobrać liczbę elementów w części pola listy pola kombi.
int GetCount() const;
Wartość zwracana
Liczba elementów. Zwrócona liczba jest większa niż wartość indeksu ostatniego elementu (indeks jest oparty na zera). Jest to CB_ERR
, jeśli wystąpi błąd.
Przykład
// Add 10 items to the combo box.
CString strItem;
for (int i = 0; i < 10; i++)
{
strItem.Format(_T("item %d"), i);
m_pComboBox->AddString(strItem);
}
// Verify the 10 items were added to the combo box.
ASSERT(m_pComboBox->GetCount() == 10);
CComboBox::GetCueBanner
Pobiera tekst cue wyświetlany dla kontrolki pola kombi.
CString GetCueBanner() const;
BOOL GetCueBanner(
LPTSTR lpszText,
int cchText) const;
Parametry
lpszText
[out] Wskaźnik do buforu, który odbiera tekst baneru cue.
cchText
[in] Rozmiar buforu wskazywanego przez lpszText
parametr .
Wartość zwracana
W pierwszym przeciążeniu obiekt zawierający tekst baneru cue, CString
jeśli istnieje; CString
w przeciwnym razie obiekt o zerowej długości.
— lub —
W drugim przeciążeniu, TRUE
jeśli ta metoda zakończy się pomyślnie; w przeciwnym razie FALSE
.
Uwagi
Tekst cue to monit wyświetlany w obszarze wejściowym kontrolki pola kombi. Tekst cue jest wyświetlany, dopóki użytkownik nie udostępni danych wejściowych.
Ta metoda wysyła CB_GETCUEBANNER
komunikat opisany w zestawie SDK systemu Windows.
CComboBox::GetCurSel
Wywołaj tę funkcję składową, aby określić, który element w polu kombi jest zaznaczony.
int GetCurSel() const;
Wartość zwracana
Indeks zerowy aktualnie wybranego elementu w polu listy pola kombi lub CB_ERR
jeśli nie wybrano żadnego elementu.
Uwagi
GetCurSel
zwraca indeks do listy.
Przykład
// Select the next item of the currently selected item
// in the combo box.
int nIndex = m_pComboBox->GetCurSel();
int nCount = m_pComboBox->GetCount();
if ((nIndex != CB_ERR) && (nCount > 1))
{
if (++nIndex < nCount)
m_pComboBox->SetCurSel(nIndex);
else
m_pComboBox->SetCurSel(0);
}
CComboBox::GetDroppedControlRect
Wywołaj GetDroppedControlRect
funkcję składową, aby pobrać współrzędne ekranu widocznego (porzuconego) pola listy rozwijanej pola kombi.
void GetDroppedControlRect(LPRECT lprect) const;
Parametry
lprect
Wskazuje strukturę RECT, która ma odbierać współrzędne.
Przykład
// This example move a combo box so that the upper left
// corner of the combo box is at a specific point.
// The point to move the combo box to.
CPoint myPoint(30, 10);
CRect r;
m_pComboBox->GetDroppedControlRect(&r);
m_pComboBox->GetParent()->ScreenToClient(&r);
r.OffsetRect(myPoint - r.TopLeft());
m_pComboBox->MoveWindow(&r);
CComboBox::GetDroppedState
Wywołaj funkcję składową GetDroppedState
, aby określić, czy pole listy pola kombi listy rozwijanej jest widoczne (usunięte).
BOOL GetDroppedState() const;
Wartość zwracana
Nonzero, jeśli pole listy jest widoczne; w przeciwnym razie 0.
Przykład
// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
m_pComboBox->ShowDropDown(TRUE);
CComboBox::GetDroppedWidth
Wywołaj tę funkcję, aby pobrać minimalną dozwoloną szerokość w pikselach pola listy pola kombi.
int GetDroppedWidth() const;
Wartość zwracana
W przypadku powodzenia minimalna dozwolona szerokość w pikselach; w przeciwnym razie, CB_ERR
.
Uwagi
Ta funkcja dotyczy tylko pól kombi z stylem CBS_DROPDOWN
lub CBS_DROPDOWNLIST
.
Domyślnie minimalna dozwolona szerokość pola listy rozwijanej wynosi 0. Minimalną dozwoloną szerokość można ustawić przez wywołanie metody SetDroppedWidth
. Gdy zostanie wyświetlona część pola kombi w polu listy, jej szerokość jest większa od minimalnej dozwolonej szerokości lub szerokości pola kombi.
Przykład
Zobacz przykład dla elementu SetDroppedWidth
.
CComboBox::GetEditSel
Pobiera pozycje znaków początkowych i końcowych bieżącego zaznaczenia w kontrolce edycji pola kombi.
DWORD GetEditSel() const;
Wartość zwracana
Wartość 32-bitowa zawierająca pozycję początkową w wyrazie o niskiej kolejności i pozycję pierwszego nieznaczonego znaku po zakończeniu zaznaczenia w wyrazie o wysokiej kolejności. Jeśli ta funkcja jest używana w polu kombi bez kontrolki edycji, CB_ERR
zostanie zwrócona.
Przykład
DWORD dwSel;
// Set the selection to be all characters after the current selection.
if ((dwSel = m_MyComboBox.GetEditSel()) != CB_ERR)
{
m_MyComboBox.SetEditSel(HIWORD(dwSel), -1);
}
CComboBox::GetExtendedUI
Wywołaj GetExtendedUI
funkcję składową, aby określić, czy pole kombi ma domyślny interfejs użytkownika, czy rozszerzony interfejs użytkownika.
BOOL GetExtendedUI() const;
Wartość zwracana
Niezerowe, jeśli pole kombi ma rozszerzony interfejs użytkownika; w przeciwnym razie 0.
Uwagi
Rozszerzony interfejs użytkownika można zidentyfikować w następujący sposób:
Kliknięcie kontrolki statycznej powoduje wyświetlenie pola listy tylko dla pól kombi ze stylem
CBS_DROPDOWNLIST
.Naciśnięcie STRZAŁKA W DÓŁ powoduje wyświetlenie pola listy (F4 jest wyłączony).
Przewijanie w kontrolce statycznej jest wyłączone, gdy lista elementów nie jest widoczna (strzałek są wyłączone).
Przykład
// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
m_pComboBox->SetExtendedUI(TRUE);
CComboBox::GetHorizontalExtent
Pobiera z pola kombi szerokość w pikselach, w których część pola listy pola kombi można przewijać w poziomie.
UINT GetHorizontalExtent() const;
Wartość zwracana
Przewijana szerokość części pola kombi w pikselach.
Uwagi
Ma to zastosowanie tylko wtedy, gdy część pola listy pola kombi ma poziomy pasek przewijania.
Przykład
// Find the longest string in the combo box.
CString strText;
CSize sz;
UINT dxText = 0;
CDC *pDCCombo = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strText);
sz = pDCCombo->GetTextExtent(strText);
if (sz.cx > (LONG)dxText)
dxText = sz.cx;
}
m_pComboBox->ReleaseDC(pDCCombo);
// Set the horizontal extent only if the current extent is not large enough.
if (m_pComboBox->GetHorizontalExtent() < dxText)
{
m_pComboBox->SetHorizontalExtent(dxText);
ASSERT(m_pComboBox->GetHorizontalExtent() == dxText);
}
CComboBox::GetItemData
Pobiera podaną przez aplikację wartość 32-bitową skojarzona z określonym elementem pola kombi.
DWORD_PTR GetItemData(int nIndex) const;
Parametry
nIndex
Zawiera indeks zerowy elementu w polu listy pola kombi.
Wartość zwracana
Wartość 32-bitowa skojarzona z elementem lub CB_ERR
jeśli wystąpi błąd.
Uwagi
Wartość 32-bitowa można ustawić za pomocą dwItemData
parametru wywołania funkcji składowej SetItemData
. Użyj funkcji składowej GetItemDataPtr
, jeśli pobierana wartość 32-bitowa jest wskaźnikiem (void
*).
Przykład
// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemData(i) == 0)
{
m_pComboBox->SetItemData(i, (DWORD)-1);
}
}
CComboBox::GetItemDataPtr
Pobiera podaną przez aplikację wartość 32-bitową skojarzona z określonym elementem pola kombi jako wskaźnik (void
*).
void* GetItemDataPtr(int nIndex) const;
Parametry
nIndex
Zawiera indeks zerowy elementu w polu listy pola kombi.
Wartość zwracana
Pobiera wskaźnik lub -1, jeśli wystąpi błąd.
Przykład
LPVOID lpmyPtr = m_pComboBox->GetItemDataPtr(5);
// Check all the items in the combo box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemDataPtr(i) == lpmyPtr)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
}
CComboBox::GetItemHeight
Wywołaj funkcję składową, GetItemHeight
aby pobrać wysokość elementów listy w polu kombi.
int GetItemHeight(int nIndex) const;
Parametry
nIndex
Określa składnik pola kombi, którego wysokość ma zostać pobrana. nIndex
Jeśli parametr ma wartość -1, pobierana jest wysokość części kontrolki edycji (lub tekstu statycznego). Jeśli pole kombi ma CBS_OWNERDRAWVARIABLE
styl, określa indeks zerowy elementu listy, nIndex
którego wysokość ma zostać pobrana. nIndex
W przeciwnym razie należy ustawić wartość 0.
Wartość zwracana
Wysokość w pikselach określonego elementu w polu kombi. Zwracana wartość to CB_ERR
, jeśli wystąpi błąd.
Przykład
// Set the height of every item so the item
// is completely visible.
CString strLBText;
CSize size;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strLBText);
size = pDC->GetTextExtent(strLBText);
// Only want to set the item height if the current height
// is not big enough.
if (m_pComboBox->GetItemHeight(i) < size.cy)
m_pComboBox->SetItemHeight(i, size.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::GetLBText
Pobiera ciąg z pola listy pola kombi.
int GetLBText(
int nIndex,
LPTSTR lpszText) const;
void GetLBText(
int nIndex,
CString& rString) const;
Parametry
nIndex
Zawiera indeks zerowy ciągu pola listy do skopiowania.
lpszText
Wskazuje bufor, który ma odbierać ciąg. Bufor musi mieć wystarczającą ilość miejsca dla ciągu i znak null zakończenia.
rString
Odwołanie do .CString
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 CB_ERR
.
Uwagi
Druga forma tej funkcji składowej wypełnia CString
obiekt tekstem elementu.
Jeśli nIndex
jest nieprawidłowa, ta funkcja zgłasza E_INVALIDARG
wyjątek (kod błędu: -2147024809
, 0x80070057
).
Przykład
// Dump all of the items in the combo box.
CString str1, str2;
int n;
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
n = m_pComboBox->GetLBTextLen(i);
m_pComboBox->GetLBText(i, str1.GetBuffer(n));
str1.ReleaseBuffer();
str2.Format(_T("item %d: %s\r\n"), i, str1.GetBuffer(0));
AFXDUMP(str2);
}
CComboBox::GetLBTextLen
Pobiera długość ciągu w polu listy pola kombi.
int GetLBTextLen(int nIndex) const;
Parametry
nIndex
Zawiera indeks zerowy ciągu pola listy.
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 CB_ERR
.
Przykład
Zobacz przykład dla elementu CComboBox::GetLBText
.
CComboBox::GetLocale
Pobiera ustawienia regionalne używane przez pole kombi.
LCID GetLocale() const;
Wartość zwracana
Wartość identyfikatora ustawień regionalnych (LCID) dla ciągów w polu kombi.
Uwagi
Ustawienia regionalne są używane na przykład w celu określenia kolejności sortowania ciągów w posortowanych polach kombi.
Przykład
Zobacz przykład dla elementu CComboBox::SetLocale
.
CComboBox::GetMinVisible
Pobiera minimalną liczbę widocznych elementów na liście rozwijanej bieżącej kontrolki pola kombi.
int GetMinVisible() const;
Wartość zwracana
Minimalna liczba widocznych elementów na bieżącej liście rozwijanej.
Uwagi
Ta metoda wysyła CB_GETMINVISIBLE
komunikat opisany w zestawie SDK systemu Windows.
CComboBox::GetTopIndex
Pobiera indeks na podstawie zera pierwszego widocznego elementu w części pola listy pola kombi.
int GetTopIndex() const;
Wartość zwracana
Indeks na podstawie zera pierwszego widocznego elementu w części pola listy pola kombi, jeśli się powiedzie, CB_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 nTop = m_pComboBox->GetCount() / 2;
if (m_pComboBox->GetTopIndex() < nTop)
{
m_pComboBox->SetTopIndex(nTop);
ASSERT(m_pComboBox->GetTopIndex() == nTop);
}
CComboBox::InitStorage
Przydziela pamięć do przechowywania elementów pól listy w polu listy w polu listy pola kombi.
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ć część pola kombi w polu listy, zanim będzie potrzebna reallokacja pamięci, w przeciwnym razie CB_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 części pola listy elementu CComboBox
.
Tylko system Windows 95/98: wParam
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ęć.
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ę.
Przykład
// Initialize the storage of the combo box to be 256 strings with
// about 10 characters per string, performance improvement.
int nAlloc = pmyComboBox->InitStorage(256, 10);
ASSERT(nAlloc != CB_ERRSPACE);
// Add 256 items to the combo box.
CString strAdd;
for (int i = 0; i < 256; i++)
{
strAdd.Format(_T("item string %d"), i);
m_pComboBox->AddString(strAdd);
}
CComboBox::InsertString
Wstawia ciąg do pola listy pola kombi.
int InsertString(
int nIndex,
LPCTSTR lpszString);
Parametry
nIndex
Zawiera indeks oparty na zerach do pozycji w polu listy, który otrzyma ciąg. Jeśli ten parametr to -1, ciąg zostanie dodany na końcu listy.
lpszString
Wskazuje ciąg o wartości null, który ma zostać wstawiony.
Wartość zwracana
Indeks zerowy pozycji, w której wstawiono ciąg. Zwracana wartość to CB_ERR
, jeśli wystąpi błąd. Wartość zwracana jest CB_ERRSPACE
, jeśli za mało miejsca jest dostępne do przechowywania nowego ciągu.
Uwagi
W przeciwieństwie do funkcji InsertString
składowej AddString
funkcja składowa nie powoduje sortowania listy z CBS_SORT
stylem.
Uwaga
Ta funkcja nie jest obsługiwana przez kontrolkę systemu Windows ComboBoxEx
. Aby uzyskać więcej informacji na temat tej kontrolki, zobacz ComboBoxEx
Kontrolki w zestawie Windows SDK.
Przykład
// Insert items in between existing items.
CString strIns;
int nItems = m_pComboBox->GetCount();
for (int i = 0; i < nItems; i++)
{
strIns.Format(_T("item string %c"), (char)('A' + i));
m_pComboBox->InsertString(2 * i, strIns);
}
CComboBox::LimitText
Ogranicza długość w bajtach tekstu, który użytkownik może wprowadzić w kontrolce edycji pola kombi.
BOOL LimitText(int nMaxChars);
Parametry
nMaxChars
Określa długość (w bajtach) tekstu, który użytkownik może wprowadzić. Jeśli ten parametr ma wartość 0, długość tekstu jest ustawiona na 65 535 bajtów.
Wartość zwracana
Jeśli operacja niezerowa się powiedzie. Jeśli zostanie wywołana dla pola kombi ze stylem CBS_DROPDOWNLIST
lub polem kombi bez kontrolki edycji, zwracana wartość to CB_ERR
.
Uwagi
Jeśli pole kombi nie ma stylu CBS_AUTOHSCROLL
, ustawienie limitu tekstu na większy niż rozmiar kontrolki edycji nie będzie miało żadnego wpływu.
LimitText
Ogranicza tylko tekst, który użytkownik może wprowadzić. Nie ma wpływu na żaden tekst już w kontrolce edycji po wysłaniu wiadomości ani nie ma wpływu na długość tekstu skopiowanego do kontrolki edycji po wybraniu ciągu w polu listy.
Przykład
// Limit the number of characters in the combo box's edit control to
// be the maximum number visible.
// Get the text metrics for the combo box; needed for the
// average character width.
TEXTMETRIC tm;
CDC *pDCCB = m_pComboBox->GetDC();
pDCCB->GetTextMetrics(&tm);
m_pComboBox->ReleaseDC(pDCCB);
CRect rect;
m_pComboBox->GetClientRect(&rect);
m_pComboBox->LimitText(rect.Width() / tm.tmAveCharWidth);
CComboBox::MeasureItem
Wywoływana przez platformę po utworzeniu pola kombi 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ąpij MEASUREITEMSTRUCT
tę funkcję składową i wypełnij strukturę, aby poinformować system Windows o wymiarach pola listy w polu kombi. Jeśli pole kombi zostanie utworzone przy użyciu CBS_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.
CBS_OWNERDRAWFIXED
Użycie stylu w polu kombi właściciela rysu utworzonego SubclassDlgItem
z funkcją CWnd
składową obejmuje dalsze zagadnienia programistyczne. Zobacz dyskusję w notatce technicznej 14.
Zobacz CWnd::OnMeasureItem
opis MEASUREITEMSTRUCT
struktury.
Przykład
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The combo box control was created with
// the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);
if (lpMeasureItemStruct->itemID != (UINT)-1)
{
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC *pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}
}
CComboBox::Paste
Wstawia dane ze Schowka do kontrolki edycji pola kombi na bieżącym położeniu kursora.
void Paste();
Uwagi
Dane są wstawiane tylko wtedy, gdy Schowek zawiera dane w CF_TEXT
formacie.
Przykład
// Replace all of the text in the combo box's edit control with the text
// in the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Paste();
CComboBox::ResetContent
Usuwa wszystkie elementy z pola listy i edytuje kontrolkę pola kombi.
void ResetContent();
Przykład
// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);
CComboBox::SelectString
Wyszukuje ciąg w polu listy pola kombi, a jeśli ciąg zostanie znaleziony, wybierze ciąg w polu listy i skopiuje go do kontrolki edycji.
int SelectString(
int nStartAfter,
LPCTSTR lpszString);
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 wartość -1, całe pole listy jest wyszukiwane od początku.
lpszString
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 na podstawie zera wybranego elementu, jeśli został znaleziony ciąg. Jeśli wyszukiwanie nie powiodło się, zwracana wartość to CB_ERR
, a bieżące zaznaczenie nie zostanie zmienione.
Uwagi
Ciąg jest wybierany tylko wtedy, gdy jego początkowe znaki (od punktu początkowego) pasują do znaków w ciągu prefiksu.
Należy pamiętać, że SelectString
funkcje składowe i FindString
znajdują ciąg, ale SelectString
funkcja składowa również wybiera ciąg.
Przykład
// The string to match.
LPCTSTR lpszSelect = _T("item");
// Select the item that begins with the specified string.
int nSel = m_pComboBox->SelectString(0, lpszSelect);
ASSERT(nSel != CB_ERR);
CComboBox::SetCueBanner
Ustawia tekst wskazówek wyświetlany dla kontrolki pola kombi.
BOOL SetCueBanner(LPCTSTR lpszText);
Parametry
lpszText
[in] Wskaźnik do buforu zakończonego wartością null, który zawiera tekst wskaźnika.
Wartość zwracana
TRUE
jeśli metoda zakończy się powodzeniem; w przeciwnym razie, FALSE
.
Uwagi
Tekst cue to monit wyświetlany w obszarze wejściowym kontrolki pola kombi. Tekst cue jest wyświetlany, dopóki użytkownik nie udostępni danych wejściowych.
Ta metoda wysyła CB_SETCUEBANNER
komunikat opisany w zestawie SDK systemu Windows.
Przykład
Pierwszy przykład kodu definiuje zmienną , m_combobox
która jest używana do programowego uzyskiwania dostępu do kontrolki pola kombi. Ta zmienna jest używana w następnym przykładzie.
// Variable to access the combo box control
CComboBox m_combobox;
W następnym przykładzie kodu ustawiono baner cue dla kontrolki pola kombi.
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetCurSel
Wybiera ciąg w polu listy pola kombi.
int SetCurSel(int nSelect);
Parametry
nSelect
Określa indeks zerowy ciągu do wybrania. Jeśli wartość -1, wszystkie bieżące zaznaczenie w polu listy zostaną usunięte, a kontrolka edycji zostanie wyczyszczone.
Wartość zwracana
Indeks na podstawie zera elementu wybrany, jeśli komunikat zakończy się pomyślnie. Wartość zwracana jest CB_ERR
, jeśli nSelect
jest większa niż liczba elementów na liście lub jeśli nSelect
jest ustawiona na -1, co spowoduje wyczyszczenie zaznaczenia.
Uwagi
W razie potrzeby pole listy przewija ciąg do widoku (jeśli pole listy jest widoczne). Tekst w kontrolce edycji pola kombi jest zmieniany w celu odzwierciedlenia nowego zaznaczenia. Wszystkie poprzednie wybory w polu listy zostaną usunięte.
Przykład
// Select the last item in the combo box.
int nLast = pmyComboBox->GetCount() - 1;
if (nLast >= 0)
m_pComboBox->SetCurSel(nLast);
CComboBox::SetDroppedWidth
Wywołaj tę funkcję, aby ustawić minimalną dozwoloną szerokość w pikselach pola listy pola kombi.
int SetDroppedWidth(UINT nWidth);
Parametry
nWidth
Minimalna dozwolona szerokość części pola kombi w pikselach.
Wartość zwracana
Jeśli to się powiedzie, nowa szerokość pola listy, w przeciwnym razie CB_ERR
.
Uwagi
Ta funkcja dotyczy tylko pól kombi z stylem CBS_DROPDOWN
lub CBS_DROPDOWNLIST
.
Domyślnie minimalna dozwolona szerokość pola listy rozwijanej wynosi 0. Gdy zostanie wyświetlona część pola kombi w polu listy, jej szerokość jest większa od minimalnej dozwolonej szerokości lub szerokości pola kombi.
Przykład
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Adjust the width for the vertical scroll bar and the left and right border.
dx += ::GetSystemMetrics(SM_CXVSCROLL) + 2 * ::GetSystemMetrics(SM_CXEDGE);
// Set the width of the list box so that every item is completely visible.
m_pComboBox->SetDroppedWidth(dx);
CComboBox::SetEditSel
Wybiera znaki w kontrolce edycji pola kombi.
BOOL SetEditSel(
int nStartChar,
int nEndChar);
Parametry
nStartChar
Określa pozycję początkową. Jeśli pozycja początkowa jest ustawiona na -1, wszystkie istniejące opcje zostaną usunięte.
nEndChar
Określa położenie końcowe. Jeśli pozycja końcowa jest ustawiona na -1, zaznaczono cały tekst z pozycji początkowej do ostatniego znaku w kontrolce edycji.
Wartość zwracana
Nonzero, jeśli funkcja składowa zakończyła się pomyślnie; w przeciwnym razie 0. Jest to CB_ERR
, jeśli CComboBox
ma CBS_DROPDOWNLIST
styl lub nie ma pola listy.
Uwagi
Pozycje są oparte na zera. Aby wybrać pierwszy znak kontrolki edycji, należy określić pozycję początkową 0. Pozycja końcowa jest dla znaku tuż po ostatnim znaku do wybrania. Aby na przykład wybrać pierwsze cztery znaki kontrolki edycji, należy użyć pozycji początkowej 0 i pozycji końcowej 4.
Uwaga
Ta funkcja nie jest obsługiwana przez kontrolkę systemu Windows ComboBoxEx
. Aby uzyskać więcej informacji na temat tej kontrolki, zobacz ComboBoxEx
Kontrolki w zestawie Windows SDK.
Przykład
Zobacz przykład dla elementu CComboBox::GetEditSel
.
CComboBox::SetExtendedUI
Wywołaj funkcję składową SetExtendedUI
, aby wybrać domyślny interfejs użytkownika lub rozszerzony interfejs użytkownika dla pola kombi zawierającego CBS_DROPDOWN
styl lub CBS_DROPDOWNLIST
.
int SetExtendedUI(BOOL bExtended = TRUE);
Parametry
bExtended
Określa, czy pole kombi powinno używać rozszerzonego interfejsu użytkownika, czy domyślnego interfejsu użytkownika. Wartość TRUE
wybiera rozszerzony interfejs użytkownika; wartość FALSE
wybiera standardowy interfejs użytkownika.
Wartość zwracana
CB_OKAY
jeśli operacja zakończy się pomyślnie lub CB_ERR
wystąpi błąd.
Uwagi
Rozszerzony interfejs użytkownika można zidentyfikować w następujący sposób:
Kliknięcie kontrolki statycznej powoduje wyświetlenie pola listy tylko dla pól kombi ze stylem
CBS_DROPDOWNLIST
.Naciśnięcie STRZAŁKA W DÓŁ powoduje wyświetlenie pola listy (F4 jest wyłączony).
Przewijanie w kontrolce statycznej jest wyłączone, gdy lista elementów nie jest widoczna (strzałek są wyłączone).
Przykład
Zobacz przykład dla elementu CComboBox::GetExtendedUI
.
CComboBox::SetHorizontalExtent
Ustawia szerokość w pikselach, za pomocą której część pola listy pola kombi można przewijać w poziomie.
void SetHorizontalExtent(UINT nExtent);
Parametry
nExtent
Określa liczbę pikseli, za pomocą których część pola listy pola kombi można przewijać w poziomie.
Uwagi
Jeśli szerokość pola listy jest mniejsza niż ta wartość, poziomy pasek przewijania będzie przewijać elementy w poziomie w polu listy. Jeśli szerokość pola listy jest równa lub większa od tej wartości, poziomy pasek przewijania jest ukryty lub, jeśli pole kombi ma CBS_DISABLENOSCROLL
styl, wyłączone.
Przykład
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings can
// be scrolled to.
m_pComboBox->SetHorizontalExtent(dx);
CComboBox::SetItemData
Ustawia wartość 32-bitową skojarzona z określonym elementem w polu kombi.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Parametry
nIndex
Zawiera indeks oparty na zerach do elementu do ustawienia.
dwItemData
Zawiera nową wartość do skojarzenia z elementem.
Wartość zwracana
CB_ERR
jeśli wystąpi błąd.
Uwagi
Użyj funkcji składowej SetItemDataPtr
, jeśli element 32-bitowy ma być wskaźnikiem.
Przykład
// Set the data of each item to be equal to its index.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemData(i, i);
}
CComboBox::SetItemDataPtr
Ustawia wartość 32-bitową skojarzona z określonym elementem w polu kombi jako określony wskaźnik (void
*).
int SetItemDataPtr(
int nIndex,
void* pData);
Parametry
nIndex
Zawiera indeks oparty na zerach do elementu.
pData
Zawiera wskaźnik do skojarzenia z elementem.
Wartość zwracana
CB_ERR
jeśli wystąpi błąd.
Uwagi
Ten wskaźnik pozostaje prawidłowy dla okresu życia pola kombi, mimo że względna pozycja elementu w polu kombi 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_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
CComboBox::SetItemHeight
Wywołaj SetItemHeight
funkcję składową, aby ustawić wysokość elementów listy w polu kombi lub wysokość części kontrolki edycji (lub tekstu statycznego) pola kombi.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Parametry
nIndex
Określa, czy wysokość elementów listy, czy wysokość części kontrolki edycji (lub tekstu statycznego) pola kombi jest ustawiona.
Jeśli pole kombi ma CBS_OWNERDRAWVARIABLE
styl, określa indeks zerowy elementu listy, nIndex
którego wysokość ma być ustawiona; w przeciwnym razie musi być równa 0, nIndex
a wysokość wszystkich elementów listy zostanie ustawiona.
Jeśli nIndex
wartość to -1, należy ustawić wysokość części kontrolki edycji lub tekstu statycznego pola kombi.
cyItemHeight
Określa wysokość składnika pola kombi identyfikowanego przez nIndex
element w pikselach.
Wartość zwracana
CB_ERR
jeśli indeks lub wysokość są nieprawidłowe; w przeciwnym razie 0.
Uwagi
Wysokość części kontrolki edycji (lub tekstu statycznego) pola kombi jest ustawiana niezależnie od wysokości elementów listy. Aplikacja musi upewnić się, że wysokość części kontrolki edycji (lub tekstu statycznego) nie jest mniejsza niż wysokość określonego elementu pola 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 = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
m_pComboBox->SetItemHeight(i, sz.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::SetLocale
Ustawia identyfikator ustawień regionalnych dla tego pola kombi.
LCID SetLocale(LCID nNewLocale);
Parametry
nNewLocale
Nowa wartość identyfikatora ustawień regionalnych (LCID) ustawiona dla pola kombi.
Wartość zwracana
Poprzednia wartość identyfikatora ustawień regionalnych (LCID) dla tego pola kombi.
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_pComboBox->SetLocale(mylcid);
ASSERT(m_pComboBox->GetLocale() == mylcid);
CComboBox::SetMinVisibleItems
Ustawia minimalną liczbę widocznych elementów na liście rozwijanej bieżącego formantu pola kombi.
BOOL SetMinVisibleItems(int iMinVisible);
Parametry
iMinVisible
[in] Określa minimalną liczbę widocznych elementów.
Wartość zwracana
TRUE
jeśli ta metoda zakończy się pomyślnie; w przeciwnym razie, FALSE
.
Uwagi
Ta metoda wysyła CB_SETMINVISIBLE
komunikat opisany w zestawie SDK systemu Windows.
Przykład
Pierwszy przykład kodu definiuje zmienną , m_combobox
która jest używana do programowego uzyskiwania dostępu do kontrolki pola kombi. Ta zmienna jest używana w następnym przykładzie.
// Variable to access the combo box control
CComboBox m_combobox;
Następny przykład kodu wstawia 20 elementów do listy rozwijanej kontrolki pola kombi. Następnie określa, że co najmniej 10 elementów będzie wyświetlanych, gdy użytkownik naciska strzałkę listy rozwijanej.
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetTopIndex
Gwarantuje, że określony element jest widoczny w części pola listy pola kombi.
int SetTopIndex(int nIndex);
Parametry
nIndex
Określa indeks zerowy elementu pola listy.
Wartość zwracana
Zero w przypadku powodzenia lub CB_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 combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);
CComboBox::ShowDropDown
Wyświetla lub ukrywa pole listy pola kombi, które ma CBS_DROPDOWN
styl lub CBS_DROPDOWNLIST
.
void ShowDropDown(BOOL bShowIt = TRUE);
Parametry
bShowIt
Określa, czy pole listy rozwijanej ma być wyświetlane, czy ukryte. Wartość TRUE
pola listy. Wartość ukrywa FALSE
pole listy.
Uwagi
Domyślnie pole kombi tego stylu spowoduje wyświetlenie pola listy.
Ta funkcja składowa nie ma wpływu na pole kombi utworzone przy użyciu CBS_SIMPLE
stylu.
Przykład
Zobacz przykład dla elementu CComboBox::GetDroppedState
.
Zobacz też
Przykładowe CTRLBARS MFC
CWnd
Klasa
Wykres hierarchii
CWnd
Klasa
CButton
Klasa
CEdit
Klasa
CListBox
Klasa
CScrollBar
Klasa
CStatic
Klasa
CDialog
Klasa