Acerca de los controles ComboBoxEx

Los controles ComboBoxEx son controles de cuadro combinado que proporcionan compatibilidad nativa con imágenes de elementos. Para que las imágenes de elementos sean fácilmente accesibles, el control proporciona compatibilidad con la lista de imágenes. Mediante este control, puede proporcionar la funcionalidad de un cuadro combinado sin tener que dibujar manualmente gráficos de elementos.

En este tema se incluyen las siguientes secciones.

Crear controles ComboBoxEx

De hecho, un control ComboBoxEx crea un cuadro combinado secundario y realiza tareas de dibujo del propietario en función de una lista de imágenes asignada. Por lo tanto, el estilo de CBS_OWNERDRAWFIXED está implícito y no es necesario usarlo al crear el control. Dado que las listas de imágenes se usan para proporcionar gráficos de elementos, no se puede usar el estilo CBS_OWNERDRAWVARIABLE .

Se debe inicializar un control ComboBoxEx llamando a la función InitCommonControlsEx , especificando ICC_USEREX_CLASSES en la estructura INITCOMMONCONTROLSEX correspondiente.

Puede crear un control ComboBoxEx mediante la función CreateWindowEx y especificar WC_COMBOBOXEX como clase de ventana. La clase se registra cuando se llama a la función InitCommonControlsEx como se explicó anteriormente.

Los controles ComboBoxEx se crean sin una lista de imágenes predeterminada. Para usar imágenes de elementos, debe crear una lista de imágenes para el control ComboBoxEx y asignarla al control mediante el mensaje CBEM_SETIMAGELIST . Si no asigna una lista de imágenes al control ComboBoxEx, el control solo muestra el texto del elemento.

Estilos de control ComboBoxEx

Los controles ComboBoxEx solo admiten los siguientes estilos comboBox:

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • CBS_DROPDOWNLIST
  • WS_CHILD

También hay varios estilos extendidos de control ComboBoxEx que solo usan ComboBoxEx.

Nota

Es posible que el estilo de CBS_SIMPLE no funcione correctamente en algunos casos.

 

Dado que el control ComboBoxEx realiza tareas de dibujo del propietario en función de una lista de imágenes asignadas, el estilo de CBS_OWNERDRAWFIXED está implícito; no es necesario usarlo al crear el control. Dado que las listas de imágenes se usan para proporcionar gráficos de elementos, no se puede usar el estilo CBS_OWNERDRAWVARIABLE . El control ComboBoxEx también admite estilos extendidos de control ComboBoxEx que proporcionan características adicionales.

Elementos de control ComboBoxEx

Los controles ComboBoxEx mantienen la información del elemento mediante una estructura COMBOBOXEXITEM . Esta estructura incluye miembros para índices de elementos, índices de imagen (normal, estado de selección y superposición), valores de sangría, cadenas de texto y valores específicos del elemento.

El control ComboBoxEx proporciona fácil acceso y manipulación de elementos a través de la mensajería. Para agregar o eliminar un elemento, envíe el mensaje CBEM_INSERTITEM o CBEM_DELETEITEM . Puede modificar los elementos que se encuentran actualmente en el control mediante el mensaje CBEM_SETITEM .

Elementos de devolución de llamada

Los controles ComboBoxEx admiten atributos de elemento de devolución de llamada. Puede especificar un elemento como un elemento de devolución de llamada al agregarlo al control mediante CBEM_INSERTITEM. Al asignar valores a la estructura COMBOBOXEXITEM de un elemento, debe especificar los valores de marca de devolución de llamada adecuados. A continuación se muestran los miembros de estructura COMBOBOXEXITEM y sus valores de marca de devolución de llamada correspondientes.

Miembro Valor de devolución de llamada
pszText LPSTR_TEXTCALLBACK
iImage I_IMAGECALLBACK
iSelectedImage I_IMAGECALLBACK
iOverlay I_IMAGECALLBACK
iIndent I_INDENTCALLBACK

 

El control solicitará información sobre los elementos de devolución de llamada mediante el envío de códigos de notificación CBEN_GETDISPINFO . Esta notificación se envía en forma de mensaje de WM_NOTIFY . Cuando la aplicación procesa este mensaje, debe proporcionar la información solicitada para el control. Si establece el miembro mask de la estructura COMBOBOXEXITEM correspondiente en CBEIF_DI_SETITEM, el control almacenará los datos del elemento y no volverá a solicitarlos.

Listas de imágenes de control ComboBoxEx

Si desea que un control ComboBoxEx muestre iconos con elementos, debe proporcionar una lista de imágenes. Los controles ComboBoxEx admiten hasta tres imágenes para un elemento: una para su estado seleccionado, otra para su estado no seleccionado y otra para una imagen de superposición. Asigne una lista de imágenes existente a un control ComboBoxEx mediante el mensaje CBEM_SETIMAGELIST .

La estructura COMBOBOXEXITEM contiene miembros que representan los índices de imagen de cada lista de imágenes (seleccionada, no seleccionada y superpuesta). Para cada elemento, establezca estos miembros para mostrar las imágenes deseadas. No es necesario especificar índices de imagen para cada tipo de imagen. Puedes mezclar y hacer coincidir los tipos de imagen que quieras, pero siempre estableces el miembro mask de la estructura COMBOBOXEXITEM para indicar qué miembros se usan. El control omite los miembros que no se han marcado como válidos.

Nota

Si usa el estilo CBS_SIMPLE , no se muestran los iconos.

 

Acerca de los mensajes de notificación de control ComboBoxEx

Un control ComboBoxEx envía mensajes de notificación para notificar los cambios dentro de sí mismo o para solicitar información del elemento de devolución de llamada. El elemento primario del control recibe todos los mensajes WM_COMMAND del cuadro combinado incluido en el control ComboBoxEx. El control ComboBoxEx envía sus propias notificaciones mediante mensajes WM_NOTIFY . Como resultado, el propietario del control debe estar preparado para procesar ambas formas de mensajes de notificación.

A continuación se muestran los códigos de notificación específicos de ComboBoxEx que se envían a través de mensajes WM_NOTIFY .

notificación Descripción
CBEN_BEGINEDIT Indica que el usuario ha activado la lista desplegable o ha hecho clic en el cuadro de edición del control.
CBEN_ENDEDIT Indica que el usuario ha seleccionado un elemento de la lista desplegable o ha concluido una operación de edición dentro del cuadro de edición.
CBEN_DELETEITEM Informa de que se eliminó un elemento.
CBEN_GETDISPINFO Solicita información sobre los atributos de un elemento.
CBEN_INSERTITEM Indica que se insertó un elemento en el control .

 

Reenvío de mensajes de control ComboBoxEx

A continuación se muestran los mensajes de cuadro combinado estándar que un control ComboBoxEx reenvía a su cuadro combinado secundario. El control ComboBoxEx puede procesar algunos de estos mensajes antes o después de reenviar el mensaje.

A continuación se muestran los mensajes de windows que un control ComboBoxEx reenvía a su ventana primaria: