Udostępnij za pośrednictwem


Informacje o kontrolkach ComboBoxEx

Kontrolka ComboBoxEx to kontrolka kombi, która oferuje natywne wsparcie dla obrazów elementów. Aby ułatwić dostęp do obrazów elementów, kontrolka zapewnia obsługę listy obrazów. Za pomocą tej kontrolki można zapewnić funkcjonalność pola kombi bez konieczności ręcznego rysowania grafiki elementu.

Ten temat zawiera następujące sekcje.

Tworzenie kontrolek ComboBoxEx

W rzeczywistości kontrolka ComboBoxEx tworzy podrzędne pole wyboru i wykonuje zadania rysowania zdefiniowane przez właściciela na podstawie przypisanej listy obrazów. W związku z tym styl CBS_OWNERDRAWFIXED jest domyślny i nie jest konieczne użycie go podczas tworzenia kontroli. Ponieważ listy obrazów są używane do udostępniania grafiki elementów, nie można użyć stylu CBS_OWNERDRAWVARIABLE.

Kontrolka ComboBoxEx musi zostać zainicjowana przez wywołanie funkcji InitCommonControlsEx, określając ICC_USEREX_CLASSES w towarzyszącej strukturze INITCOMMONCONTROLSEX.

Kontrolkę ComboBoxEx można utworzyć przy użyciu funkcji CreateWindowEx i określania WC_COMBOBOXEX jako klasy okna. Klasa jest rejestrowana, gdy funkcja InitCommonControlsEx jest wywoływana zgodnie z powyższym wyjaśnieniem.

Kontrolki ComboBoxEx są tworzone bez domyślnej listy obrazów. Aby użyć obrazów elementów, musisz utworzyć listę obrazów dla kontrolki ComboBoxEx i przypisać ją do kontrolki przy użyciu komunikatu CBEM_SETIMAGELIST. Jeśli nie przypiszesz listy obrazów do kontrolki ComboBoxEx, kontrolka wyświetla tylko tekst elementu.

Style kontrolek ComboBoxEx

Kontrolki ComboBoxEx obsługują tylko następujące style ComboBox:

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • Lista_rozwijalna_CBS
  • WS_CHILD

Istnieje również kilka rozszerzonych stylów kontrolki ComboBoxEx, które są używane tylko przez ComboBoxEx.

Notatka

Styl CBS_SIMPLE może nie działać prawidłowo w niektórych przypadkach.

 

Ponieważ kontrolka ComboBoxEx wykonuje zadania rysowania przez właściciela na podstawie przypisanej listy obrazów, styl CBS_OWNERDRAWFIXED jest implikowany; nie trzeba go używać podczas tworzenia kontrolki. Ponieważ listy obrazów są używane do udostępniania grafiki elementów, nie można użyć stylu CBS_OWNERDRAWVARIABLE. Kontrolka ComboBoxEx obsługuje również Style rozszerzone kontrolki ComboBoxEx, które zapewniają dodatkowe funkcje.

Elementy kontrolne ComboBoxEx

Kontrolki ComboBoxEx utrzymują informacje o elemencie przy użyciu struktury COMBOBOXEXITEM. Ta struktura obejmuje elementy członkowskie indeksów elementów, indeksy obrazów (normalny, stan zaznaczenia i nakładka), wartości wcięcia, ciągi tekstowe i wartości specyficzne dla elementu.

Kontrolka ComboBoxEx zapewnia łatwy dostęp do elementów i manipulowanie nimi za pośrednictwem komunikatów. Aby dodać lub usunąć element, wyślij komunikat CBEM_INSERTITEM lub CBEM_DELETEITEM. Elementy aktualnie w kontrolce można modyfikować przy użyciu komunikatu CBEM_SETITEM.

Elementy zwrotne

Kontrolki ComboBoxEx obsługują atrybuty wywoływanego elementu. Element można określić jako element wywołania zwrotnego podczas dodawania go do kontrolki przy użyciu CBEM_INSERTITEM. Podczas przypisywania wartości do struktury COMBOBOXEXITEM elementu należy określić odpowiednie wartości flagi wywołania zwrotnego. Poniżej przedstawiono elementy członkowskie struktury COMBOBOXEXITEM i odpowiadające im wartości flagi wywołania zwrotnego.

Członek Wartość wywołania zwrotnego
pszText LPSTR_TEXTCALLBACK
iObraz I_IMAGECALLBACK
iSelectedImage I_IMAGECALLBACK
iOverlay I_IMAGECALLBACK
iIndent I_INDENTCALLBACK

 

Kontrolka będzie żądać informacji o elementach wywołania zwrotnego, wysyłając CBEN_GETDISPINFO kody powiadomień. To powiadomienie jest wysyłane w postaci wiadomości WM_NOTIFY. Gdy aplikacja przetwarza ten komunikat, musi podać żądane informacje dla kontrolki. Jeśli ustawisz maskę elementu członkowskiego towarzyszącego COMBOBOXEXITEM struktury na CBEIF_DI_SETITEM, element sterujący przechowa dane elementu i nie będzie ich żądać ponownie.

Listy obrazów kontrolki ComboBoxEx

Jeśli chcesz, aby kontrolka ComboBoxEx wyświetlała ikony z elementami, musisz podać listę obrazów. Kontrolki ComboBoxEx obsługują maksymalnie trzy obrazy dla elementu — jeden dla wybranego stanu, jeden dla stanu niezaznaczonego i jeden dla obrazu nakładki. Przypisz istniejącą listę obrazów do kontrolki ComboBoxEx przy użyciu komunikatu CBEM_SETIMAGELIST.

Struktura COMBOBOXEXITEM zawiera składowe reprezentujące indeksy obrazów dla każdej listy obrazów (wybrane, niezaznaczone i nakładki). Dla każdego elementu ustaw te atrybuty, aby wyświetlić żądane obrazy. Nie jest konieczne określenie indeksów obrazów dla każdego typu obrazu. Można mieszać i dopasowywać typy obrazów tak, jak chcesz, ale zawsze ustawiać maskę składową COMBOBOXEXITEM struktury, aby wskazać, które elementy członkowskie są używane. Kontrolka ignoruje członków, którzy nie zostali oznaczeni jako poprawni.

Notatka

Jeśli używasz stylu CBS_SIMPLE, ikony nie są wyświetlane.

 

Informacje o powiadomieniach kontrolki ComboBoxEx

Kontrolka ComboBoxEx wysyła komunikaty powiadomień w celu zgłaszania zmian w obrębie samego siebie lub żądania informacji o elemencie wywołania zwrotnego. Element nadrzędny kontrolki ComboBoxEx odbiera wszystkie komunikaty WM_COMMAND z pola kombi, które jest w niej zawarte. Kontrolka ComboBoxEx wysyła własne powiadomienia przy użyciu komunikatów WM_NOTIFY. W związku z tym właściciel kontrolki musi być przygotowany do przetwarzania obu formularzy komunikatów powiadomień.

Poniżej przedstawiono kody powiadomień specyficzne dla elementu ComboBoxEx wysyłane za pośrednictwem komunikatów WM_NOTIFY.

Powiadomienie Opis
CBEN_BEGINEDIT Sygnały, że użytkownik aktywował listę rozwijaną lub kliknął w polu edycji kontrolki.
CBEN_ENDEDIT Sygnały, że użytkownik wybrał element z listy rozwijanej lub zakończył operację edycji w polu edycji.
CBEN_DELETEITEM Zgłasza, że element został usunięty.
CBEN_GETDISPINFO Żąda informacji o atrybutach elementu.
CBEN_INSERTITEM Sygnały, że element został wstawiony do kontrolki.

 

Przekazywanie komunikatów dla kontrolki ComboBoxEx

Poniżej przedstawiono standardowe komunikaty pól wyboru, które kontrolka ComboBoxEx przekazuje do swojego podrzędnego pola wyboru. Niektóre z tych komunikatów mogą być przetwarzane przez kontrolkę ComboBoxEx przed lub po przesłaniu komunikatu.

Poniżej przedstawiono komunikaty systemu Windows, które kontrolka ComboBoxEx przekazuje do okna nadrzędnego: