Сведения о элементах управления ComboBoxEx
Элементы управления ComboBoxEx — это комбинированные списки, обеспечивающие встроенную поддержку изображений элементов. Чтобы сделать изображения элементов доступными, элемент управления обеспечивает поддержку списка изображений. С помощью этого элемента управления можно предоставить функциональные возможности комбинированного поля без необходимости вручную создавать графику элементов.
В этом разделе содержатся следующие разделы.
- Создание контролов ComboBoxEx
- Стили элемента управления ComboBoxEx
- элементы управления ComboBoxEx
- Элементы обратного вызова
- Списки изображений для элемента управления ComboBoxEx
- Об уведомлениях элемента управления 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 до или после передачи сообщения.
- CB_DELETESTRING
- CB_FINDSTRINGEXACT
- CB_GETCOUNT
- CB_GETCURSEL
- CB_GETDROPPEDCONTROLRECT
- CB_GETDROPPEDSTATE
- CB_GETITEMDATA
- CB_GETITEMHEIGHT
- CB_GETLBTEXT
- CB_GETLBTEXTLEN
- CB_GETEXTENDEDUI
- CB_LIMITTEXT
- CB_RESETCONTENT
- CB_SETCURSEL
- CB_SETDROPPEDWIDTH
- CB_SETEXTENDEDUI
- CB_SETITEMDATA
- CB_SETITEMHEIGHT
- CB_SHOWDROPDOWN
Ниже приведены сообщения windows, которые элемент управления ComboBoxEx пересылает в родительское окно:
- WM_COMMAND (это включает все уведомления CBN_.)
- WM_NOTIFY