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

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

Эта тема описана в следующих разделах.

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

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

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

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

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

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

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

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • CBS_DROPDOWNLIST
  • WS_CHILD

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

Примечание.

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

 

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

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

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

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

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

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

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

 

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

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

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

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

Примечание.

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

 

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

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

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

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

 

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

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

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

  • WM_COMMAND (это включает все уведомления CBN_.)
  • WM_NOTIFY