Поделиться через


Сведения о элементах управления ComboBoxEx

Элементы управления ComboBoxEx — это комбинированные списки, обеспечивающие встроенную поддержку изображений элементов. Чтобы сделать изображения элементов доступными, элемент управления обеспечивает поддержку списка изображений. С помощью этого элемента управления можно предоставить функциональные возможности комбинированного поля без необходимости вручную создавать графику элементов.

В этом разделе содержатся следующие разделы.

Создание элементов управления ComboBoxEx

Фактически, контрол ComboBoxEx создает дочерний выпадающий список и выполняет пользовательские задачи рисования на основе назначенного списка изображений. Таким образом, стиль CBS_OWNERDRAWFIXED подразумевается, и нет необходимости использовать его при создании элемента управления. Так как списки изображений используются для предоставления графики элементов, стиль CBS_OWNERDRAWVARIABLE нельзя использовать.

Элемент управления ComboBoxEx должен быть инициализирован с помощью вызова функции InitCommonControlsEx, указывая ICC_USEREX_CLASSES в сопровождающей структуре INITCOMMONCONTROLSEX.

Элемент управления ComboBoxEx можно создать с помощью функции CreateWindowEx и указания WC_COMBOBOXEX в качестве класса окна. Класс регистрируется при вызове функции InitCommonControlsEx, как описано выше.

Элементы управления ComboBoxEx создаются без списка образов по умолчанию. Чтобы использовать изображения элементов, необходимо создать список изображений для элемента управления ComboBoxEx и назначить его элементу управления с помощью сообщения CBEM_SETIMAGELIST. Если список изображений не назначается элементу управления ComboBoxEx, элемент управления отображает только текст элемента.

Стили элементов управления ComboBoxEx

Элементы управления ComboBoxEx поддерживают только следующие стили ComboBox:

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • CBS_ВыпадающийСписок
  • WS_CHILD

Существует также несколько ComboBoxEx расширенных стилей управления, которые используются исключительно ComboBoxEx.

Заметка

Стиль CBS_SIMPLE может работать неправильно в некоторых случаях.

 

Поскольку элемент управления ComboBoxEx выполняет задачи по пользовательскому рисованию на основе назначенного списка изображений, подразумевается стиль CBS_OWNERDRAWFIXED; не нужно использовать его при создании элемента управления. Так как списки изображений используются для предоставления графики элементов, стиль CBS_OWNERDRAWVARIABLE нельзя использовать. Элемент управления ComboBoxEx также поддерживает расширенные стили элемента управления ComboBoxEx с дополнительными функциями.

Элементы управления ComboBoxEx

Элементы управления ComboBoxEx поддерживают информацию об элементах, используя структуру COMBOBOXEXITEM. Эта структура включает члены для индексов элементов, индексов изображений (обычные, состояния выделения и наложения), значений отступов, текстовых строк и значений, относящихся к элементам.

Элемент управления ComboBoxEx обеспечивает простой доступ к элементам и их обработке с помощью обмена сообщениями. Чтобы добавить или удалить элемент, отправьте сообщение CBEM_INSERTITEM или CBEM_DELETEITEM. Вы можете изменить текущие элементы в контроле с помощью сообщения CBEM_SETITEM.

Элементы обратного вызова

Элементы управления ComboBoxEx поддерживают атрибуты элемента обратного вызова. Можно указать элемент как элемент обратного вызова при добавлении его в управление с помощью CBEM_INSERTITEM. При назначении значений структуре элемента COMBOBOXEXITEM необходимо указать соответствующие значения флага обратного вызова. Ниже приведены элементы структуры COMBOBOXEXITEM и их соответствующие значения флагов обратного вызова.

Член Значение обратного вызова
pszText LPSTR_TEXTCALLBACK
iImage I_IMAGECALLBACK
iSelectedImage I_IMAGECALLBACK
iOverlay I_IMAGECALLBACK
iIndent I_INDENTCALLBACK

 

Элемент управления будет запрашивать сведения о элементах вызова, отправляя коды уведомлений CBEN_GETDISPINFO. Это уведомление отправляется в виде сообщения WM_NOTIFY. При обработке этого сообщения приложение должно предоставить запрошенные сведения для элемента управления. Если задать маску элемента структуры COMBOBOXEXITEM в CBEIF_DI_SETITEM, элемент управления будет хранить данные элемента и не запрашивать их снова.

Списки образов элементов управления ComboBoxEx

Если вы хотите, чтобы элемент управления ComboBoxEx отображал значки с элементами, необходимо указать список изображений. Элементы управления ComboBoxEx поддерживают до трех изображений для элемента— одного для выбранного состояния, одного для его неизбираемого состояния и одного для изображения наложения. Назначьте существующий список изображений элементу управления ComboBoxEx с помощью сообщения CBEM_SETIMAGELIST.

Структура comBOBOXEXITEM содержит элементы, представляющие индексы изображений для каждого списка изображений (выбранные, неизбираемые и наложенные). Для каждого элемента задайте для этих членов отображение нужных изображений. Не обязательно указывать индексы изображений для каждого типа изображения. Вы можете смешивать и соответствовать типам изображений, но всегда задавать маску члена структуры COMBOBOXEXITEM, чтобы указать, какие элементы используются. Элемент управления игнорирует элементы, которые не помечены как допустимые.

Заметка

Если вы используете стиль CBS_SIMPLE, значки не отображаются.

 

Сведения об уведомительных сообщениях элемента управления ComboBoxEx

Элемент управления ComboBoxEx отправляет сообщения уведомлений, чтобы сообщать об изменениях внутри себя или запрашивать информацию об элементах обратного вызова. Родительский элемент управления получает все сообщения WM_COMMAND из поля со списком, содержащегося в элементе управления ComboBoxEx. Элемент управления ComboBoxEx отправляет свои собственные уведомления с помощью WM_NOTIFY сообщений. В результате владелец элемента управления должен быть готов обработать обе формы уведомлений.

Ниже приведены коды уведомлений ComboBoxEx, отправляемые через WM_NOTIFY сообщения.

Уведомление Описание
CBEN_BEGINEDIT Сигнализирует о том, что пользователь активировал раскрывающийся список или щелкнул в поле редактирования элемента управления.
CBEN_ENDEDIT Сигнализирует о том, что пользователь выбрал элемент из раскрывающегося списка или завершил операцию редактирования в поле редактирования.
CBEN_DELETEITEM Сообщает, что элемент был удален.
CBEN_GETDISPINFO Запрашивает сведения об атрибутах элемента.
CBEN_INSERTITEM Сигнализирует о том, что элемент был вставлен в элемент управления.

 

Пересылка сообщений управления ComboBoxEx

Ниже приведены стандартные сообщения комбинированного списка, которые элемент управления ComboBoxEx перенаправляет в его дочерний комбинированный список. Некоторые из этих сообщений могут обрабатываться элементом управления ComboBoxEx до или после передачи сообщения.

Ниже приведены сообщения windows, которые элемент управления ComboBoxEx пересылает в родительское окно: