Udostępnij za pośrednictwem


Funkcje pola kombi

W tym dokumencie omówiono funkcje pola kombi. Aby uzyskać więcej informacji, zobacz następujące tematy:

Funkcje specjalne

Istnieją komunikaty i funkcje specjalne, które umożliwiają aplikacji wyświetlanie listy katalogów w polu kombi, kojarzenie danych z elementami listy w polu kombi i zmienianie interfejsu klawiatury dla pola kombi listy rozwijanej lub listy rozwijanej.

Listy katalogów

Aplikacja może dodać nazwy plików lub podkatalogów do pola kombi, wysyłając do niego komunikat CB_DIR. Parametr wParam dla tego komunikatu określa atrybuty plików do dodania, a parametr lParam jest wskaźnikiem do ciągu tekstowego definiującego specyfikację pliku.

Możesz użyć funkcji DlgDirListComboBox, aby zastąpić zawartość pola kombi w oknie dialogowym. Funkcja wypełnia pole kombi nazwami dysków, katalogów i plików, które spełniają określony zestaw kryteriów. Funkcja DlgDirSelectComboBoxEx pobiera bieżące zaznaczenie w polu kombi zainicjowanym przez DlgDirListComboBox. Te funkcje umożliwiają użytkownikowi wybranie dysku, katalogu lub pliku z pola kombi bez wpisywania lokalizacji i nazwy pliku.

Funkcje DlgDirListComboBox i DlgDirSelectComboBoxEx oraz komunikat CB_DIR są podobne do funkcji DlgDirList i DlgDirSelectEx oraz komunikatu LB_DIR używanego z polami listy.

Dane skojarzone z elementami listy

Aplikacja może skojarzyć dane z elementami listy w polu kombi. Komunikat CB_SETITEMDATA kojarzy wartość DWORD z elementem listy, a CB_GETITEMDATA pobiera wartość skojarzona z elementem listy.

Przykład w Tworzenie rysowanego pola kombi właściciela używa danych elementów do skojarzenia stałej z każdym elementem w polu listy rozwijanej. Taka unikatowa wartość identyfikuje każdy element niezależnie od posortowanej pozycji.

Inne aplikacje mogą używać danych elementów do skojarzenia uchwytu lub wskaźnika z elementem listy. Jeśli tak, aplikacja może przetworzyć komunikat WM_DELETEITEM w celu usunięcia lub zwolnienia określonego obiektu po usunięciu elementu listy.

Rozszerzony interfejs użytkownika

Pola kombi listy rozwijanej i pola listy rozwijanej obsługują alternatywny interfejs klawiatury o nazwie rozszerzony interfejs użytkownika. Domyślnie F4 otwiera lub zamyka listę, a strzałka W dół zmienia bieżący wybór. W polu kombi z rozszerzonym interfejsem użytkownika F4 jest wyłączony, a naciśnięcie STRZAŁKA W DÓŁ otwiera listę rozwijaną. Ponadto koło myszy, które zwykle przewija elementy na liście, nie ma żadnej funkcji po ustawieniu rozszerzonego interfejsu użytkownika.

Aby wybrać interfejs użytkownika dla pola kombi, aplikacja może wysłać komunikat CB_SETEXTENDEDUI do pola kombi. Wartość TRUE parametru wParam umożliwia korzystanie z rozszerzonego interfejsu użytkownika; wartość FALSE ustawia domyślny interfejs użytkownika. Aby określić, czy pole kombi używa rozszerzonego interfejsu użytkownika, aplikacja może wysłać komunikat CB_GETEXTENDEDUI do pola kombi.

Banery wskazówek

Banery cue to nowa funkcja kontrolek edycji i pól kombi. Celem baneru wskazówek jest dostarczenie użytkownikowi wskazówek dotyczących celu kontrolki edycji lub pola kombi. Poniższy zrzut ekranu przedstawia kontrolkę edycji z tekstem cue "Search".

zrzut ekranu kontrolki edycji z tekstem cue

Tekst baneru wskazówek jest wyświetlany, gdy kontrolka edycji nie ma tekstu lub pole kombi nie ma zaznaczenia. Gdy użytkownik wprowadza tekst w kontrolce edycji lub dokonuje zaznaczenia w polu kombi, baner cue zniknie. Domyślnie baner sygnału znika również, gdy kontrolka edycji lub pole kombi odbiera fokus.

Powiadomienia o polu kombi

Komunikaty z pól kombi są wysyłane jako kody powiadomień w postaci komunikatów WM_COMMAND. Kod powiadomienia jest przechowywany w wysokim słowie parametru wParam, a aplikacja może przetworzyć następujące kody powiadomień pola kombi.

Kod powiadomienia Opis
CBN_CLOSEUP Wskazuje, że lista w polu kombi listy rozwijanej lub polu listy rozwijanej zostanie zamknięta.
CBN_DBLCLK Wskazuje, że użytkownik dwukrotnie kliknął element listy w prostym polu kombi.
CBN_DROPDOWN Wskazuje, że lista w polu kombi listy rozwijanej lub polu listy rozwijanej zostanie otwarta.
CBN_EDITCHANGE Wskazuje, że użytkownik zmienił tekst w kontrolce edycji prostego lub rozwijanego pola kombi. Ten kod powiadomienia jest wysyłany po wyświetlania zmienionego tekstu.
CBN_EDITUPDATE Wskazuje, że użytkownik zmienił tekst w kontrolce edycji prostego lub rozwijanego pola kombi. Ten kod powiadomienia jest wysyłany przed wyświetleniem zmieniony tekst.
CBN_ERRSPACE Wskazuje, że pole kombi nie może przydzielić wystarczającej ilości pamięci do wykonania żądania, takiego jak dodanie elementu listy.
CBN_KILLFOCUS Wskazuje, że pole kombi utraci fokus wejściowy.
CBN_SELCHANGE Wskazuje, że bieżące zaznaczenie zostało zmienione.
CBN_SELENDCANCEL Wskazuje, że zaznaczenie dokonane na liście rozwijanej, podczas gdy zostało usunięte, powinno być ignorowane.
CBN_SELENDOK Wskazuje, że lista rozwijana została zaznaczona, podczas gdy została ona usunięta, powinna zostać zaakceptowana.
CBN_SETFOCUS Wskazuje, że pole kombi otrzymało fokus wejściowy.

 

Domyślne zachowanie pola kombi

W poniższej tabeli opisano komunikaty obsługiwane specjalnie przez wstępnie zdefiniowaną procedurę okna klasy COMBOBOX.

Komunikat Opis
CB_ADDSTRING Wysyła komunikat LB_ADDSTRING do okna listy w celu dodania elementu listy.
CB_DELETESTRING Wysyła komunikat LB_DELETESTRING do okna listy w celu usunięcia elementu listy.
CB_DIR Dodaje nazwy plików pasujące do określonych atrybutów i ścieżki do listy.
CB_FINDSTRING Wysyła komunikat LB_FINDSTRING do okna listy. Ten komunikat zwraca indeks pierwszego elementu listy rozpoczynającego się od określonego tekstu.
CB_FINDSTRINGEXACT Wysyła komunikat LB_FINDSTRING do okna listy. Ten komunikat zwraca indeks pierwszego elementu listy dokładnie pasujący do określonego tekstu.
CB_GETCOUNT Wysyła komunikat LB_GETCOUNT do okna listy. Zwraca liczbę elementów listy.
CB_GETCURSEL Wysyła komunikat LB_GETCURSEL do okna listy. Zwraca indeks aktualnie wybranego elementu, jeśli istnieje.
CB_GETDROPPEDCONTROLRECT Wypełnia określoną strukturę prostokąta współrzędnymi ekranu listy rozwijanej.
CB_GETDROPPEDSTATE Zwraca wartość TRUE, jeśli lista rozwijana jest otwarta; W przeciwnym razie zwraca wartość FALSE.
CB_GETDROPPEDWIDTH Zwraca minimalną dozwoloną szerokość w pikselach listy rozwijanej.
CB_GETEDITSEL Wysyła komunikat EM_GETSEL do kontrolki edycji i zwraca pozycję początkową i końcową bieżącego zaznaczenia. W polach listy rozwijanej procedura okna zwraca CB_ERR.
CB_GETEXTENDEDUI Zwraca true, jeśli pole kombi jest polem kombi listy rozwijanej lub polem listy rozwijanej, a flaga rozszerzenia interfejsu użytkownika jest ustawiona; W przeciwnym razie zwraca wartość FALSE.
CB_GETHORIZONTALEXTENT Wysyła komunikat LB_GETHORIZONTALEXTENT do okna listy. Zwraca szerokość przewijania w pikselach listy rozwijanej.
CB_GETITEMDATA Wysyła komunikat LB_GETITEMDATA do okna listy. Zwraca wartość skojarzona z określonym elementem listy.
CB_GETITEMHEIGHT Wysyła komunikat LB_GETITEMHEIGHT do okna listy. Zwraca wysokość w pikselach określonego elementu listy rysowanego przez właściciela.
CB_GETLBTEXT Wysyła komunikat LB_GETTEXT do okna listy. Kopiuje określony tekst listy do określonego buforu.
CB_GETLBTEXTLEN Wysyła komunikat LB_GETTEXTLEN do okna listy. Zwraca długość w TCHARs, określonego tekstu listy.
CB_GETLOCALE Wysyła komunikat LB_GETLOCALE do okna listy. Zwraca bieżące ustawienia regionalne dla listy.
CB_GETMINVISIBLE Pobiera minimalną liczbę widocznych elementów na liście rozwijanej pola kombi.
CB_GETTOPINDEX Wysyła komunikat LB_GETTOPINDEX do okna listy. Zwraca indeks pierwszego widocznego elementu na liście rozwijanej.
CB_INITSTORAGE Wysyła komunikat LB_INITSTORAGE do okna listy. Inicjuje miejsce dla określonej liczby elementów i określoną liczbę bajtów dla ciągów elementów.
CB_INSERTSTRING Wysyła komunikat LB_INSERTSTRING do okna listy. Wstawia element listy w określonej pozycji.
CB_LIMITTEXT Wysyła komunikat EM_LIMITTEXT do kontrolki edycji. Ustawia maksymalną liczbę znaków, które użytkownik może wprowadzić w kontrolce edycji. W polach listy rozwijanej procedura okna zwraca CB_ERR.
CB_RESETCONTENT Wysyła komunikat LB_RESETCONTENT do okna listy i usuwa zawartość listy.
CB_SELECTSTRING Wysyła komunikat LB_SELECTSTRING do okna listy. Wybiera pierwszy element listy, jeśli istnieje, rozpoczynający się od znaków w określonym tekście.
CB_SETCURSEL Wysyła komunikat LB_SETCURSEL do okna listy i ustawia bieżący wybór.
CB_SETDROPPEDWIDTH Ustawia minimalną dozwoloną szerokość w pikselach listy rozwijanej.
CB_SETEDITSEL Wysyła komunikat EM_SETSEL do kontrolki edycji. Wybiera określony zakres tekstu. W polach listy rozwijanej procedura okna zwraca CB_ERR.
CB_SETEXTENDEDUI Ustawia lub czyści rozszerzoną flagę interfejsu użytkownika. Ta flaga zmienia klucze, które otwierają i zamykają listę w polu kombi listy rozwijanej lub liście rozwijanej. Jeśli pole kombi jest prostym polem kombi, procedura okna zwraca CB_ERR.
CB_SETHORIZONTALEXTENT Wysyła komunikat LB_SETHORIZONTALEXTENT do okna listy. Ustawia szerokość przewijania w pikselach listy rozwijanej.
CB_SETITEMDATA Wysyła komunikat LB_SETITEMDATA do okna listy. Kojarzy określoną wartość z elementem listy.
CB_SETITEMHEIGHT Wysyła komunikat LB_SETITEMHEIGHT do okna listy. Ustawia wysokość określonego elementu listy rysowanego przez właściciela lub pole wyboru.
CB_SETLOCALE Wysyła komunikat LB_SETLOCALE do okna listy i ustawia bieżące ustawienia regionalne dla listy. Ustawienia regionalne mają wpływ na sposób sortowania listy, jeśli ma on styl CBS_SORT i ciągi są dodawane przy użyciu CB_ADDSTRING.
CB_SETMINVISIBLE Ustawia minimalną liczbę widocznych elementów na liście rozwijanej pola kombi.
CB_SETTOPINDEX Wysyła komunikat LB_SETTOPINDEX do okna listy. Przewija listę rozwijaną, więc określony element znajduje się w górnej części widocznego zakresu.
CB_SHOWDROPDOWN Wyświetla lub ukrywa listę rozwijaną. Ten komunikat nie ma wpływu na proste pola kombi.
WM_CHAR Przetwarza dane wejściowe znaków. W polach listy rozwijanej ten komunikat jest przekazywany do okna listy, co powoduje przeniesienie zaznaczenia do pierwszego elementu rozpoczynającego się od określonego znaku. W prostych i rozwijanych polach kombi ten komunikat jest przekazywany do kontrolki edycji.
WM_CLEAR Usuwa wybór edycji. W prostych i rozwijanych polach kombi kontrolka edycji przetwarza ten komunikat. W polach listy rozwijanej procedura okna zwraca CB_ERR.
WM_COMMAND Przetwarza komunikaty powiadomień z okna edycji kontrolki i listy oraz wysyła odpowiednie kody powiadomień pola kombi do okna nadrzędnego.
W przypadku powiadomień edycji kontrolek procedura okna może zaktualizować bieżące zaznaczenie okna listy, indeks karetki i indeks najwyższego indeksu. W przypadku komunikatów z powiadomieniem o liście procedura okna może zaktualizować zawartość pola wyboru.
WM_COMPAREITEM Przekazuje komunikat do okna nadrzędnego, umożliwiając aplikacji określenie względnej pozycji sortowania dwóch elementów listy rysowanych przez właściciela. Okno pola kombi odbiera ten komunikat z okna listy.
WM_COPY Kopiuje wybór edycji do schowka. W prostych i rozwijanych polach kombi kontrolka edycji przetwarza ten komunikat. W polach listy rozwijanej procedura okna zwraca CB_ERR.
WM_CREATE Inicjuje pole kombi.
WM_CUT Usuwa zaznaczenie edycji i umieszcza je w schowku. W prostych i rozwijanych polach kombi kontrolka edycji przetwarza ten komunikat. W polach listy rozwijanej procedura okna zwraca CB_ERR.
WM_DELETEITEM Przekazuje komunikat do okna nadrzędnego, powiadamiając aplikację o usunięciu elementu listy. Okno pola kombi odbiera ten komunikat z okna listy.
WM_DRAWITEM Przekazuje komunikat do okna nadrzędnego, umożliwiając aplikacji malowanie określonego elementu listy. Okno pola kombi odbiera ten komunikat z okna listy. Procedura okna może również pochodzić z tego komunikatu, aby aplikacja malowała pole wyboru pola listy rozwijanej.
WM_ENABLE Ustawia stan, aby włączyć lub zakazać wprowadzania myszy i klawiatury.
WM_ERASEBKGND Zwraca wartość 1 wskazującą, że tło jest wymazane.
WM_GETDLGCODE Zwraca kombinację wartości DLG_WANTCHARS i DLGC_WANTARROWS.
WM_GETFONT Zwraca uchwyt do bieżącej czcionki, za pomocą której pole kombi narysuje jego tekst.
WM_GETTEXT Kopiuje zawartość pola wyboru do określonego buforu. W prostych i rozwijanych polach kombi kontrolka edycji przetwarza ten komunikat.
WM_GETTEXTLENGTH Zwraca długość tekstu w polu zaznaczenia w postaci znaków. W prostych i rozwijanych polach kombi kontrolka edycji przetwarza ten komunikat.
WM_KEYDOWN Przetwarza nietypowe dane wejściowe klawiatury. W polach listy rozwijanej ten komunikat jest wysyłany do okna listy, które może pokazywać lub ukrywać się albo zmieniać bieżący wybór lub indeks karetki. W prostych i rozwijanych polach kombi ten komunikat jest przekazywany do kontrolki edycji. Kontrolka edycji przekazuje niektóre klucze do okna listy, takie jak STRZAŁKA W GÓRę i W DÓŁ oraz F4.
WM_KILLFOCUS Ukrywa wyróżnienie w polu zaznaczenia i zamyka listę rozwijaną, jeśli jest to konieczne. Jeśli okno odbierające fokus wejściowy jest częścią pola kombi (na przykład kontrolka edycji), ten komunikat jest ignorowany.
WM_LBUTTONDBLCLK Tak samo jak WM_LBUTTONDOWN.
WM_LBUTTONDOWN Ustawia fokus na pole kombi, a w przypadku pól kombi i list rozwijanych można otworzyć lub zamknąć listę. Jeśli zostanie otwarta lista, procedura okna przechwytuje mysz, aby włączyć zaznaczenie, przeciągając i zwalniając przycisk myszy.
WM_LBUTTONUP Zwalnia przechwytywanie myszy, jeśli mysz otworzyła listę.
WM_MEASUREITEM Publikuje komunikat w oknie nadrzędnym, umożliwiając aplikacji modyfikowanie zawartości określonej struktury MEASUREITEMSTRUCT. Okno pola kombi odbiera ten komunikat z okna listy.
WM_MOUSEMOVE Publikuje komunikat w oknie listy, jeśli mysz otworzyła listę, a przycisk myszy jest nadal w dół. Dzięki temu użytkownik może wybrać element, przeciągając wskaźnik myszy do elementu listy, a następnie zwalniając przycisk.
WM_NCCREATE Przydziela wewnętrzną strukturę danych używaną przez procedurę okna pola kombi.
WM_NCDESTROY Zwalnia zasoby przydzielone w odpowiedzi na komunikat WM_NCCREATE.
WM_PAINT Maluje nieprawidłowy region pola kombi. Jeśli wParam nie jest NULL, przyjmuje się, że jest to dojście kontekstu urządzenia (DC) przekazywane z funkcji podklasy. Procedura okna używa określonego kontrolera domeny zamiast wywoływania BeginPaint i EndPaint.
WM_PASTE Zamienia zaznaczony obszar edycji na zawartość schowka. W prostych i rozwijanych polach kombi kontrolka edycji przetwarza ten komunikat. W polach listy rozwijanej procedura okna zwraca CB_ERR.
WM_SETFOCUS Ustawia fokus na kontrolkę edycji lub, w polach listy rozwijanej, odwraca pole wyboru i włącza daszek w oknie listy.
WM_SETFONT Zapisuje określony uchwyt czcionki w wewnętrznej strukturze, dostosowuje wymiary pola wyboru i listy oraz unieważnia okno pola kombi. Tekst w polu zaznaczenia i lista jest wyświetlana w zapisanej czcionki.
WM_SETREDRAW Ustawia lub czyści flagę ponownego rysowania. Jeśli flaga ponownego rysowania zostanie wyczyszczone, pole kombi nie zostanie ponownie przemalowane, dopóki flaga nie zostanie ponownie ustawiona.
WM_SETTEXT Ustawia zawartość kontrolki edycji. W prostych i rozwijanych polach kombi kontrolka edycji przetwarza ten komunikat. W polach listy rozwijanej procedura okna zwraca CB_ERR.
WM_SIZE Zmienia rozmiar okien podrzędnych, jeśli to konieczne.
WM_SYSKEYDOWN Otwiera lub zamyka listę rozwijaną w zależności od strzałki naciśnięty przez użytkownika.

 

Wszystkie inne komunikaty są przekazywane do funkcji DefWindowProc do przetwarzania domyślnego.