Mensajes de botón
Un botón puede enviar mensajes a su ventana primaria y una ventana primaria puede enviar mensajes a un botón.
En esta sección se tratan los temas siguientes.
- Enviar mensajes a botones
- Control de mensajes desde un botón
- Mensajes de notificación de botones
- Mensajes de color de botón
- Procesamiento de mensajes predeterminado del botón
- Temas relacionados
Enviar mensajes a botones
Una ventana primaria puede enviar mensajes a un botón en una ventana superpuesta o secundaria mediante la función SendMessage , o bien puede enviar mensajes a un botón en un cuadro de diálogo mediante las funciones SendDlgItemMessage, CheckDlgButton, CheckRadioButton e IsDlgButtonChecked .
Una aplicación puede usar el mensaje BM_GETCHECK para recuperar el estado de verificación de una casilla o un botón de radio. Una aplicación también puede usar el mensaje BM_GETSTATE para recuperar los estados actuales del botón (estado de comprobación, estado de inserción y estado de foco). Para obtener información sobre un estado específico, use una máscara de bits en el valor de estado devuelto.
El mensaje de BM_SETCHECK establece el estado de verificación de una casilla o un botón de radio; el mensaje devuelve cero. El BM_SETSTATE mensaje establece el estado de inserción de un botón; este mensaje también devuelve cero. El BM_SETSTYLE mensaje cambia el estilo de un botón. Está diseñado para cambiar los estilos de botón dentro de un tipo (por ejemplo, cambiar una casilla a una casilla automática). No está diseñado para cambiar entre tipos (por ejemplo, cambiar una casilla a un botón de radio). Una aplicación no debe cambiar un botón de un tipo a otro.
Un botón del estilo BS_BITMAP o BS_ICON muestra un mapa de bits o un icono en lugar de texto. El mensaje BM_SETIMAGE asocia un identificador a un mapa de bits o icono con un botón. El mensaje BM_GETIMAGE recupera un identificador del mapa de bits o icono asociado a un botón.
Una aplicación también puede usar el mensaje DM_GETDEFID para recuperar el identificador del control de botón de inserción predeterminado en un cuadro de diálogo. Una aplicación puede usar el mensaje DM_SETDEFID para establecer el botón de inserción predeterminado para un cuadro de diálogo.
Llamar a la función CheckDlgButton o CheckRadioButton equivale a enviar un mensaje de BM_SETCHECK . Llamar a la función IsDlgButtonChecked equivale a enviar un mensaje de BM_GETCHECK .
Control de mensajes desde un botón
Las notificaciones de un botón se envían como mensajes WM_COMMAND o WM_NOTIFY . Puede encontrar información sobre qué mensaje se usa en la página de referencia de cada notificación.
Para obtener más información sobre cómo controlar los mensajes, vea Control Messages. Consulte también Mensajes de botón.
Mensajes de notificación de botones
Cuando el usuario hace clic en un botón, su estado cambia y el botón envía códigos de notificación, en forma de WM_COMMAND mensajes, a su ventana primaria. Por ejemplo, un control de botón de inserción envía el código de notificación BN_CLICKED cada vez que el usuario elige el botón. En todos los casos (excepto por BCN_HOTITEMCHANGE), la palabra de orden bajo del parámetro wParam contiene el identificador de control, la palabra de orden superior de wParam contiene el código de notificación y el parámetro lParam contiene el identificador de la ventana de control.
Tanto el mensaje como la respuesta de la ventana primaria dependen del tipo, estilo y estado actual del botón. A continuación se muestran los códigos de notificación de botón que una aplicación debe supervisar y procesar.
Código de notificación | Descripción |
---|---|
BCN_HOTITEMCHANGE | El mouse entró o dejó el área de cliente de un botón. |
BN_CLICKED | El usuario ha clic en un botón. |
BN_DBLCLK o BN_DOUBLECLICKED | El usuario ha doble clic en un botón. |
BN_DISABLE | Un botón está deshabilitado. |
BN_PUSHED o BN_HILITE | El usuario ha presionado un botón. |
BN_KILLFOCUS | El botón perdió el foco del teclado. |
BN_PAINT | El botón debe pintarse. |
BN_SETFOCUS | El botón ganó el foco del teclado. |
BN_UNPUSHED o BN_UNHILITE | El botón ya no se inserta. |
Un botón envía los códigos de notificación BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUS y BN_UNPUSHED solo si tiene el estilo BS_NOTIFY . BN_DBLCLK códigos de notificación se envían automáticamente para los botones de BS_USERBUTTON, BS_RADIOBUTTON y BS_OWNERDRAW . Otros tipos de botón envían BN_DBLCLK solo si tienen el estilo BS_NOTIFY . Todos los botones envían el código de notificación BN_CLICKED independientemente de sus estilos de botón.
En el caso de los botones automáticos, el sistema cambia el estado de inserción y pinta el botón. En este caso, la aplicación normalmente procesa solo los códigos de notificación BN_CLICKED y BN_DBLCLK . En el caso de los botones que no son automáticos, la aplicación suele responder al código de notificación mediante el envío de un mensaje para cambiar el estado del botón. Para obtener información sobre cómo enviar mensajes a botones, vea Enviar mensajes a botones.
Cuando el usuario selecciona un botón dibujado por el propietario, el botón envía a su ventana primaria un mensaje de WM_DRAWITEM que contiene el identificador del control que se va a dibujar e información sobre sus dimensiones y estado.
Mensajes de color de botón
El sistema proporciona valores de color predeterminados para los botones. Una aplicación puede recuperar los valores predeterminados de estos colores llamando a la función GetSysColor o estableciendo los valores llamando a la función SetSysColors . En la tabla siguiente se muestran los valores predeterminados de color de botón.
Valor | Elemento coloreado |
---|---|
COLOR_BTNFACE | Caras de botón. |
COLOR_BTNHIGHLIGHT | Resalte el área (los bordes superior e izquierdo) de un botón. |
COLOR_BTNSHADOW | Área de sombra (los bordes inferior y derecho) de un botón. |
COLOR_BTNTEXT | Texto normal (nograyed) en botones. |
COLOR_GRAYTEXT | Texto deshabilitado (gris) en botones. Este color se establece en 0 si el controlador de pantalla actual no admite un color gris sólido. |
COLOR_WINDOW | Fondos de ventana. |
COLOR_WINDOWFRAME | Marcos de ventana. |
COLOR_WINDOWTEXT | Texto en ventanas. |
Sin embargo, llamar a SetSysColors afecta a todas las aplicaciones, por lo que no debe llamar a esta función para personalizar los botones de la aplicación.
El sistema envía un mensaje de WM_CTLCOLORBTN a la ventana primaria de un botón antes de dibujar un botón. Este mensaje contiene un identificador para el contexto del dispositivo del botón y un identificador para la ventana secundaria. La ventana primaria puede usar estos identificadores para cambiar los colores de fondo y texto del botón. Sin embargo, solo los botones dibujados por el propietario responden a la ventana primaria que procesa el mensaje.
Procesamiento de mensajes predeterminado del botón
El procedimiento de ventana de la clase de ventana de control de botón predefinido lleva a cabo el procesamiento predeterminado de todos los mensajes que el procedimiento de control de botón no procesa. Cuando el procedimiento de control de botón devuelve FALSE para cualquier mensaje, el procedimiento de ventana predefinido comprueba los mensajes y realiza las acciones predeterminadas enumeradas en la tabla siguiente.
Message | Acción predeterminada | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | Envía el botón un WM_LBUTTONDOWN y un mensaje de WM_LBUTTONUP y envía a la ventana primaria un código de notificación BN_CLICKED . | ||||||||||||||||
BM_GETCHECK | Devuelve el estado de comprobación del botón. | ||||||||||||||||
BM_GETIMAGE | Devuelve un identificador al mapa de bits o icono asociado al botón o NULL si el botón no tiene ningún mapa de bits o icono. | ||||||||||||||||
BM_GETSTATE | Devuelve el estado de comprobación actual, el estado de inserción y el estado de foco del botón. | ||||||||||||||||
BM_SETCHECK | Establece el estado de comprobación para todos los estilos de botones de radio y casillas. Si el parámetro wParam es mayor que cero para los botones de radio, el botón recibe el estilo WS_TABSTOP . | ||||||||||||||||
BM_SETIMAGE | Asocia el identificador de icono o mapa de bits especificado con el botón y devuelve un identificador al mapa de bits o icono anterior. | ||||||||||||||||
BM_SETSTATE | Establece el estado de inserción del botón. En el caso de los botones dibujados por el propietario, se envía un mensaje WM_DRAWITEM a la ventana primaria si el estado del botón ha cambiado. | ||||||||||||||||
BM_SETSTYLE | Establece el estilo del botón. Si la palabra de orden bajo del parámetro lParam es TRUE, se vuelve a dibujar el botón. | ||||||||||||||||
WM_CHAR | Activa una casilla o casilla automática cuando el usuario presiona las teclas más (+) o iguales (=). Desactiva una casilla o casilla automática cuando el usuario presiona la tecla menos (–). | ||||||||||||||||
WM_ENABLE | Pinta el botón. | ||||||||||||||||
WM_ERASEBKGND | Borra el fondo de los botones dibujados por el propietario. Los fondos de otros botones se borran como parte del procesamiento de WM_PAINT y WM_ENABLE . | ||||||||||||||||
WM_GETDLGCODE | Devuelve valores que indican el tipo de entrada procesado por el procedimiento de botón predeterminado, como se muestra en la tabla siguiente.
|
||||||||||||||||
WM_GETFONT | Devuelve un identificador a la fuente actual. | ||||||||||||||||
WM_KEYDOWN | Presiona el botón si el usuario presiona la barra espaciadora. | ||||||||||||||||
WM_KEYUP | Libera la captura del mouse para todos los casos excepto la tecla TAB. | ||||||||||||||||
WM_KILLFOCUS | Quita el rectángulo de foco de un botón. En el caso de los botones de inserción y los botones de inserción predeterminados, el rectángulo de foco se invalida. Si el botón tiene la captura del mouse, se libera la captura, no se hace clic en el botón y se quita cualquier estado de inserción. | ||||||||||||||||
WM_LBUTTONDBLCLK | Envía un código de notificación BN_DBLCLK a la ventana primaria para botones de radio y botones dibujados por el propietario. Para otros botones, se procesa un doble clic como un mensaje de WM_LBUTTONDOWN . | ||||||||||||||||
WM_LBUTTONDOWN | Resalta el botón si la posición del cursor del mouse está dentro del rectángulo de cliente del botón. | ||||||||||||||||
WM_LBUTTONUP | Libera la captura del mouse si el botón tenía la captura del mouse. | ||||||||||||||||
WM_MOUSEMOVE | Realiza la misma acción que WM_LBUTTONDOWN, si el botón tiene la captura del mouse. De lo contrario, no se realiza ninguna acción. | ||||||||||||||||
WM_NCCREATE | Convierte cualquier botón de BS_OWNERDRAW en un botón de BS_PUSHBUTTON . | ||||||||||||||||
WM_NCHITTEST | Devuelve HTTRANSPARENT, si el control de botón es un cuadro de grupo. | ||||||||||||||||
WM_PAINT | Dibuja el botón según su estilo y estado actual. | ||||||||||||||||
WM_SETFOCUS | Dibuja un rectángulo de foco en el botón que obtiene el foco. Para los botones de radio y los botones de radio automáticos, la ventana primaria se envía un código de notificación BN_CLICKED . | ||||||||||||||||
WM_SETFONT | Establece una nueva fuente y, opcionalmente, actualiza la ventana. | ||||||||||||||||
WM_SETTEXT | Establece el texto del botón. En el caso de un cuadro de grupo, el mensaje pinta sobre el texto preexistente antes de volver a pintar el cuadro de grupo con el nuevo texto. | ||||||||||||||||
WM_SYSKEYUP | Libera la captura del mouse para todos los casos excepto la tecla TAB. |
El procedimiento de ventana predefinido pasa todos los demás mensajes a la función DefWindowProc para el procesamiento predeterminado.
Temas relacionados