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".
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.