关于 ComboBoxEx 控件

ComboBoxEx 控件是组合框控件,它们为项映像提供本机支持。 若要使项图像易于访问,控件提供图像列表支持。 通过使用此控件,你可以提供组合框的功能,而无需手动绘制项图形。

本主题包含以下各节:

创建 ComboBoxEx 控件

实际上,ComboBoxEx 控件会创建子组合框,并根据分配的图像列表为你执行所有者绘制任务。 因此,CBS_OWNERDRAWFIXED样式是暗示 ,在创建控件时不需要使用它。 由于图像列表用于提供项图形,因此无法使用 CBS_OWNERDRAWVARIABLE 样式。

必须通过调用 InitCommonControlsEx 函数来初始化 ComboBoxEx 控件,并在随附的 INITCOMMONCONTROLSEX 结构中指定ICC_USEREX_CLASSES。

可以使用 CreateWindowEx 函数并将 WC_COMBOBOXEX 指定为窗口类来创建 ComboBoxEx 控件。 当 调用 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 控件使用 COMBOBOXEXITEM 结构维护项信息。 此结构包括项索引、图像索引 (正常、选择状态和覆盖) 、缩进值、文本字符串和特定于项的值的成员。

ComboBoxEx 控件通过消息传递轻松访问和操作项目。 若要添加或删除项,请发送 CBEM_INSERTITEMCBEM_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 控件最多支持一个项的三个图像-一个用于其所选状态,一个用于其非选定状态,一个用于覆盖图像。 使用 CBEM_SETIMAGELIST 消息将现有映像列表分配给 ComboBoxEx 控件。

COMBOBOXEXITEM 结构包含的成员,这些成员表示每个图像列表 (所选、未选中和覆盖) 的图像索引。 对于每个项,请设置这些成员以显示所需的图像。 不必为每种图像类型指定图像索引。 可以根据需要混合和匹配图像类型,但始终设置 COMBOBOXEXITEM 结构的掩码成员,以指示正在使用哪些成员。 该控件将忽略尚未标记为有效的成员。

注意

如果使用 CBS_SIMPLE 样式,则不显示图标。

 

关于 ComboBoxEx 控件通知消息

ComboBoxEx 控件发送通知消息以报告自身更改或请求回调项信息。 控件的父级从 ComboBoxEx 控件中包含的组合框接收所有 WM_COMMAND 消息。 ComboBoxEx 控件使用 WM_NOTIFY 消息发送自己的通知。 因此,控件的所有者必须准备好处理这两种形式的通知消息。

下面是通过WM_NOTIFY消息发送的特定于 ComboBoxEx 通知代码。

通知 说明
CBEN_BEGINEDIT 指示用户已激活下拉列表或在控件的编辑框中单击。
CBEN_ENDEDIT 指示用户已从下拉列表中选择项目,或者已结束编辑框中的编辑操作。
CBEN_DELETEITEM 报告已删除项。
CBEN_GETDISPINFO 请求有关项属性的信息。
CBEN_INSERTITEM 指示在控件中插入了项。

 

ComboBoxEx 控件消息转发

下面是 ComboBoxEx 控件转发到其子组合框的标准组合框消息。 在转发邮件之前或之后,ComboBoxEx 控件可能会处理其中一些消息。

下面是 ComboBoxEx 控件转发到其父窗口的窗口消息: