Características del cuadro combinado

En este documento se describen las características del cuadro combinado. Para obtener más información, vea los temas siguientes:

Características especiales

Hay mensajes y funciones de propósito especial que permiten a una aplicación mostrar una lista de directorios en un cuadro combinado, asociar datos con elementos de lista en un cuadro combinado y cambiar la interfaz de teclado de un cuadro combinado desplegable o cuadro de lista desplegable.

Listas de directorios

Una aplicación puede agregar los nombres de archivos o subdirectorios a un cuadro combinado enviando el mensaje CB_DIR a él. El parámetro wParam de este mensaje especifica los atributos de los archivos que se van a agregar y el parámetro lParam es un puntero a la cadena de texto que define la especificación del archivo.

Puede usar la función DlgDirListComboBox para reemplazar el contenido de un cuadro combinado en un cuadro de diálogo. La función rellena el cuadro combinado con los nombres de unidades, directorios y archivos que coinciden con un conjunto de criterios especificado. La función DlgDirSelectComboBoxEx recupera la selección actual en un cuadro combinado inicializado por DlgDirListComboBox. Estas funciones permiten al usuario seleccionar una unidad, un directorio o un archivo de un cuadro combinado sin escribir la ubicación y el nombre del archivo.

Las funciones DlgDirListComboBox y DlgDirSelectComboBoxEx y el mensaje de CB_DIR son similares a las funciones DlgDirList y DlgDirSelectEx y el mensaje de LB_DIR usado con cuadros de lista.

Datos asociados a elementos de lista

Una aplicación puede asociar datos a los elementos de lista de un cuadro combinado. El mensaje CB_SETITEMDATA asocia un valor DWORD a un elemento de lista y el CB_GETITEMDATA recupera el valor asociado a un elemento de lista.

En el ejemplo de Creación de un cuadro combinado dibujado por el propietario se usan datos de elementos para asociar una constante a cada elemento de un cuadro de lista desplegable. Este valor único identifica cada elemento independientemente de su posición ordenada.

Otras aplicaciones pueden usar datos de elementos para asociar un identificador o puntero a un elemento de lista. Si es así, una aplicación puede procesar un mensaje de WM_DELETEITEM para eliminar o liberar el objeto especificado cuando se elimina el elemento de lista.

Interfaz de usuario extendida

Los cuadros combinados desplegables y los cuadros de lista desplegables admiten una interfaz de teclado alternativa denominada interfaz de usuario extendida. De forma predeterminada, la tecla F4 abre o cierra la lista y la flecha abajo cambia la selección actual. Sin embargo, en un cuadro combinado con la interfaz de usuario extendida, la tecla F4 está deshabilitada y al presionar la tecla FLECHA ABAJO se abre la lista desplegable. Además, la rueda del mouse, que normalmente se desplaza por los elementos de la lista, no tiene ninguna función cuando se establece la interfaz de usuario extendida.

Para seleccionar la interfaz de usuario de un cuadro combinado, una aplicación puede enviar el mensaje CB_SETEXTENDEDUI al cuadro combinado. Un valor TRUE para el parámetro wParam habilita la interfaz de usuario extendida; Un valor FALSE establece la interfaz de usuario predeterminada. Para determinar si un cuadro combinado usa la interfaz de usuario extendida, una aplicación puede enviar el mensaje CB_GETEXTENDEDUI al cuadro combinado.

Pancartas cue

Los banners de cue son una nueva característica de los controles de edición y los cuadros combinados. El propósito de un banner de indicación es proporcionar una sugerencia al usuario sobre el propósito de un control de edición o un cuadro combinado. En la captura de pantalla siguiente se muestra un control de edición con el texto de indicación "Buscar".

captura de pantalla de un control de edición con el texto de indicación

El texto de un banner de indicación se muestra cuando un control de edición no tiene texto o un cuadro combinado no tiene ninguna selección. Cuando el usuario escribe texto en el control de edición o realiza una selección en un cuadro combinado, el banner de indicación desaparece. De forma predeterminada, el banner de indicación también desaparece cuando el control de edición o el cuadro combinado recibe el foco.

Notificaciones de cuadro combinado

Los mensajes de los cuadros combinados se envían como códigos de notificación en forma de mensajes WM_COMMAND . El código de notificación se almacena en la palabra alta del parámetro wParam y una aplicación puede procesar los siguientes códigos de notificación de cuadro combinado.

Código de notificación Descripción
CBN_CLOSEUP Indica que la lista de un cuadro combinado desplegable o un cuadro de lista desplegable está a punto de cerrarse.
CBN_DBLCLK Indica que el usuario ha realizado doble clic en un elemento de lista en un cuadro combinado simple.
CBN_DROPDOWN Indica que la lista de un cuadro combinado desplegable o un cuadro de lista desplegable está a punto de abrirse.
CBN_EDITCHANGE Indica que el usuario ha cambiado el texto del control de edición de un cuadro combinado simple o desplegable. Este código de notificación se envía después de mostrar el texto modificado.
CBN_EDITUPDATE Indica que el usuario ha cambiado el texto del control de edición de un cuadro combinado simple o desplegable. Este código de notificación se envía antes de que se muestre el texto modificado.
CBN_ERRSPACE Indica que el cuadro combinado no puede asignar memoria suficiente para llevar a cabo una solicitud, como agregar un elemento de lista.
CBN_KILLFOCUS Indica que el cuadro combinado está a punto de perder el foco de entrada.
CBN_SELCHANGE Indica que la selección actual ha cambiado.
CBN_SELENDCANCEL Indica que la selección realizada en la lista desplegable, mientras se ha quitado, debe omitirse.
CBN_SELENDOK Indica que se debe aceptar la selección realizada en la lista desplegable, mientras se ha quitado.
CBN_SETFOCUS Indica que el cuadro combinado ha recibido el foco de entrada.

 

Comportamiento predeterminado del cuadro combinado

En esta tabla siguiente se describen los mensajes que controla específicamente el procedimiento predefinido de ventana de clase COMBOBOX.

Message Descripción
CB_ADDSTRING Envía un mensaje LB_ADDSTRING a la ventana de lista para agregar un elemento de lista.
CB_DELETESTRING Envía un mensaje LB_DELETESTRING a la ventana de lista para eliminar un elemento de lista.
CB_DIR Agrega los nombres de archivo que coinciden con los atributos y la ruta de acceso especificados a la lista.
CB_FINDSTRING Envía un mensaje LB_FINDSTRING a la ventana de lista. Este mensaje devuelve el índice del primer elemento de lista que comienza con el texto especificado.
CB_FINDSTRINGEXACT Envía un mensaje LB_FINDSTRING a la ventana de lista. Este mensaje devuelve el índice del primer elemento de lista que coincide exactamente con el texto especificado.
CB_GETCOUNT Envía un mensaje LB_GETCOUNT a la ventana de lista. Devuelve el número de elementos de lista.
CB_GETCURSEL Envía un mensaje LB_GETCURSEL a la ventana de lista. Devuelve el índice del elemento seleccionado actualmente, si existe.
CB_GETDROPPEDCONTROLRECT Rellena la estructura de rectángulo especificada con las coordenadas de pantalla de una lista desplegable.
CB_GETDROPPEDSTATE Devuelve TRUE si se abre una lista desplegable; de lo contrario, devuelve FALSE.
CB_GETDROPPEDWIDTH Devuelve el ancho mínimo permitido, en píxeles, de la lista desplegable.
CB_GETEDITSEL Envía un mensaje EM_GETSEL al control de edición y devuelve la posición inicial y final de la selección actual. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
CB_GETEXTENDEDUI Devuelve TRUE si el cuadro combinado es un cuadro combinado desplegable o un cuadro de lista desplegable y se establece la marca extender la interfaz de usuario; de lo contrario, devuelve FALSE.
CB_GETHORIZONTALEXTENT Envía un mensaje LB_GETHORIZONTALEXTENT a la ventana de lista. Devuelve el ancho desplazable, en píxeles, de la lista desplegable.
CB_GETITEMDATA Envía un mensaje LB_GETITEMDATA a la ventana de lista. Devuelve el valor asociado al elemento de lista especificado.
CB_GETITEMHEIGHT Envía un mensaje LB_GETITEMHEIGHT a la ventana de lista. Devuelve el alto, en píxeles, del elemento de lista dibujado por el propietario especificado.
CB_GETLBTEXT Envía un mensaje LB_GETTEXT a la ventana de lista. Copia el texto de lista especificado en el búfer especificado.
CB_GETLBTEXTLEN Envía un mensaje LB_GETTEXTLEN a la ventana de lista. Devuelve la longitud, en TCHAR, del texto de lista especificado.
CB_GETLOCALE Envía un mensaje LB_GETLOCALE a la ventana de lista. Devuelve la configuración regional actual de la lista.
CB_GETMINVISIBLE Obtiene el número mínimo de elementos visibles en la lista desplegable de un cuadro combinado.
CB_GETTOPINDEX Envía un mensaje LB_GETTOPINDEX a la ventana de lista. Devuelve el índice del primer elemento visible en la lista desplegable.
CB_INITSTORAGE Envía un mensaje LB_INITSTORAGE a la ventana de lista. Inicializa espacio para el número especificado de elementos y el número especificado de bytes para las cadenas de elementos.
CB_INSERTSTRING Envía un mensaje LB_INSERTSTRING a la ventana de lista. Inserta un elemento de lista en la posición especificada.
CB_LIMITTEXT Envía un mensaje EM_LIMITTEXT al control de edición. Establece el número máximo de caracteres que un usuario puede escribir en el control de edición. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
CB_RESETCONTENT Envía un mensaje LB_RESETCONTENT a la ventana de lista y quita el contenido de la lista.
CB_SELECTSTRING Envía un mensaje LB_SELECTSTRING a la ventana de lista. Selecciona el primer elemento de lista, si existe, que comienza con los caracteres del texto especificado.
CB_SETCURSEL Envía un mensaje LB_SETCURSEL a la ventana de lista y establece la selección actual.
CB_SETDROPPEDWIDTH Establece el ancho mínimo permitido, en píxeles, de la lista desplegable.
CB_SETEDITSEL Envía un mensaje EM_SETSEL al control de edición. Selecciona el intervalo de texto especificado. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
CB_SETEXTENDEDUI Establece o borra la marca de interfaz de usuario extendida. Esta marca cambia las claves que abren y cierran la lista en un cuadro combinado desplegable o un cuadro de lista desplegable. Si el cuadro combinado es un cuadro combinado simple, el procedimiento de ventana devuelve CB_ERR.
CB_SETHORIZONTALEXTENT Envía un mensaje LB_SETHORIZONTALEXTENT a la ventana de lista. Establece el ancho desplazable, en píxeles, de la lista desplegable.
CB_SETITEMDATA Envía un mensaje LB_SETITEMDATA a la ventana de lista. Asocia el valor especificado a un elemento de lista.
CB_SETITEMHEIGHT Envía un mensaje LB_SETITEMHEIGHT a la ventana de lista. Establece el alto del elemento de lista dibujado por el propietario especificado o del campo de selección.
CB_SETLOCALE Envía un mensaje LB_SETLOCALE a la ventana de lista y establece la configuración regional actual de la lista. La configuración regional afecta a cómo se ordena la lista si tiene el estilo CBS_SORT y las cadenas se agregan mediante CB_ADDSTRING.
CB_SETMINVISIBLE Establece el número mínimo de elementos visibles en la lista desplegable de un cuadro combinado.
CB_SETTOPINDEX Envía un mensaje LB_SETTOPINDEX a la ventana de lista. Desplaza la lista desplegable para que el elemento especificado esté en la parte superior del intervalo visible.
CB_SHOWDROPDOWN Muestra u oculta la lista desplegable. Este mensaje no tiene ningún efecto en los cuadros combinados simples.
WM_CHAR Procesa la entrada de caracteres. En los cuadros de lista desplegable, este mensaje se pasa a la ventana de lista, que mueve la selección al primer elemento que comienza con el carácter especificado. En cuadros combinados simples y desplegables, este mensaje se pasa al control de edición.
WM_CLEAR Elimina la selección de edición. En cuadros combinados simples y desplegables, el control de edición procesa este mensaje. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
WM_COMMAND Procesa los mensajes de notificación desde el control de edición y la ventana de lista y envía los códigos de notificación de cuadro combinado correspondientes a la ventana primaria.
Para las notificaciones de control de edición, el procedimiento de ventana puede actualizar la selección actual de la ventana de lista, el índice de intercalación y el índice superior. Para los mensajes de notificación de lista, el procedimiento de ventana puede actualizar el contenido del campo de selección.
WM_COMPAREITEM Pasa el mensaje a la ventana primaria, lo que permite a la aplicación especificar la posición de ordenación relativa de dos elementos de lista dibujados por el propietario. La ventana del cuadro combinado recibe este mensaje de la ventana de lista.
WM_COPY Copia la selección de edición en el Portapapeles. En cuadros combinados simples y desplegables, el control de edición procesa este mensaje. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
WM_CREATE Inicializa el cuadro combinado.
WM_CUT Elimina la selección de edición y la coloca en el Portapapeles. En cuadros combinados simples y desplegables, el control de edición procesa este mensaje. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
WM_DELETEITEM Pasa el mensaje a la ventana primaria, notificando a la aplicación que se ha eliminado un elemento de lista. La ventana del cuadro combinado recibe este mensaje de la ventana de lista.
WM_DRAWITEM Pasa el mensaje a la ventana primaria, lo que permite a la aplicación pintar el elemento de lista especificado. La ventana del cuadro combinado recibe este mensaje de la ventana de lista. El procedimiento de ventana también puede originar este mensaje para que la aplicación pinte el campo de selección de un cuadro de lista desplegable.
WM_ENABLE Establece el estado para habilitar o prohibir la entrada del mouse y del teclado.
WM_ERASEBKGND Devuelve 1, lo que indica que se borra el fondo.
WM_GETDLGCODE Devuelve una combinación de los valores de DLG_WANTCHARS y DLGC_WANTARROWS.
WM_GETFONT Devuelve el identificador a la fuente actual con la que el cuadro combinado dibujará su texto.
WM_GETTEXT Copia el contenido del campo de selección en el búfer especificado. En cuadros combinados simples y desplegables, el control de edición procesa este mensaje.
WM_GETTEXTLENGTH Devuelve la longitud, en caracteres, del texto del campo de selección. En cuadros combinados simples y desplegables, el control de edición procesa este mensaje.
WM_KEYDOWN Procesa la entrada del teclado que no es de caracteres. En los cuadros de lista desplegable, este mensaje se envía a la ventana de lista, que puede mostrar u ocultarse, o cambiar su índice de selección o intercalación actual. En cuadros combinados simples y desplegables, este mensaje se pasa al control de edición. El control de edición pasa determinadas teclas a la ventana de lista, como las teclas FLECHA ARRIBA y ABAJO y la tecla F4.
WM_KILLFOCUS Oculta el resaltado en el campo de selección y cierra la lista desplegable, si es necesario. Si la ventana que recibe el foco de entrada forma parte del cuadro combinado (por ejemplo, el control de edición), este mensaje se omite.
WM_LBUTTONDBLCLK Igual que WM_LBUTTONDOWN.
WM_LBUTTONDOWN Establece el foco en el cuadro combinado y, para los cuadros combinados desplegables y las listas desplegables, puede abrir o cerrar la lista. Si abre la lista, el procedimiento de ventana captura el mouse para habilitar la selección arrastrando y soltando el botón del mouse.
WM_LBUTTONUP Libera la captura del mouse si el mouse abrió la lista.
WM_MEASUREITEM Envía el mensaje a la ventana primaria, lo que permite a la aplicación modificar el contenido de la estructura MEASUREITEMSTRUCT especificada. La ventana del cuadro combinado recibe este mensaje de la ventana de lista.
WM_MOUSEMOVE Envía el mensaje a la ventana de lista si el mouse ha abierto la lista y el botón del mouse sigue estando inactivo. Esto permite a un usuario seleccionar un elemento arrastrando el puntero del mouse a un elemento de lista y soltando el botón.
WM_NCCREATE Asigna una estructura de datos interna utilizada por el procedimiento de ventana del cuadro combinado.
WM_NCDESTROY Libera los recursos asignados en respuesta al mensaje de WM_NCCREATE .
WM_PAINT Pinta la región no válida del cuadro combinado. Si wParam no es NULL, se supone que es un identificador de contexto de dispositivo (DC) pasado desde una función de subclase. El procedimiento de ventana usa el controlador de dominio especificado en lugar de llamar a BeginPaint y EndPaint.
WM_PASTE Reemplaza la selección de edición por el contenido del Portapapeles. En cuadros combinados simples y desplegables, el control de edición procesa este mensaje. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
WM_SETFOCUS Establece el foco en el control de edición o, en los cuadros de lista desplegable, invierte el campo de selección y activa el símbolo de intercalación en la ventana de lista.
WM_SETFONT Guarda el identificador de fuente especificado en una estructura interna, ajusta las dimensiones del campo de selección y la lista, e invalida la ventana del cuadro combinado. El texto del campo de selección y la lista se muestra en la fuente guardada.
WM_SETREDRAW Establece o borra la marca de volver a dibujar. Si la marca de volver a dibujar está desactivada, el cuadro combinado no se vuelve a dibujar hasta que se vuelva a establecer la marca.
WM_SETTEXT Establece el contenido del control de edición. En cuadros combinados simples y desplegables, el control de edición procesa este mensaje. En los cuadros de lista desplegable, el procedimiento de ventana devuelve CB_ERR.
WM_SIZE Cambia el tamaño de las ventanas secundarias, si es necesario.
WM_SYSKEYDOWN Abre o cierra la lista desplegable en función de la tecla de dirección que el usuario haya presionado.

 

Todos los demás mensajes se pasan a la función DefWindowProc para el procesamiento predeterminado.