Mensajes de control

Esta sección contiene información sobre cómo se usan los mensajes de Windows para comunicarse con controles.

Se tratan los temas siguientes.

Mensajes a controles comunes

Dado que los controles comunes son ventanas, una aplicación puede comunicarse con ellos mediante mensajes comunes de Microsoft Win32, como WM_GETFONT o WM_SETTEXT. Además, la clase de ventana de cada control común admite un conjunto de mensajes específicos del control. Normalmente, una aplicación usa SendMessage o SendDlgItemMessage para pasar mensajes al control (a menudo recibiendo información en el valor devuelto).

Algunos controles comunes también tienen un conjunto de macros que una aplicación puede usar en lugar de SendMessage. Normalmente, las macros son más fáciles de usar que las funciones. El código de ejemplo siguiente recupera el texto del elemento de vista de árbol seleccionado, primero mediante los mensajes sin procesar y el segundo mediante las macros equivalentes. Supongamos que hwnd es el identificador de la ventana de control.

BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;

// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);

// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);

Cuando se realiza un cambio en la configuración del color del sistema, Windows envía un mensaje WM_SYSCOLORCHANGE a todas las ventanas de nivel superior. La ventana de nivel superior debe reenviar el mensaje WM_SYSCOLORCHANGE a sus controles comunes; de lo contrario, los controles no recibirán una notificación del cambio de color. El reenvío del mensaje garantiza que los colores usados por los controles comunes sean coherentes con los usados por otros objetos de interfaz de usuario. Por ejemplo, un control de barra de herramientas usa el color "Objetos 3D" para dibujar sus botones. Si el usuario cambia el color del objeto 3D, pero el mensaje de WM_SYSCOLORCHANGE no se reenvía a la barra de herramientas, los botones de la barra de herramientas permanecerán en su color original (o incluso cambiarán a una combinación de colores antiguos y nuevos) mientras cambia el color de otros botones del sistema.

Notificaciones de controles

Los controles son ventanas secundarias que envían mensajes de notificación a la ventana primaria cuando los eventos, normalmente desencadenados por la entrada del usuario, se producen en el control . La aplicación se basa en estos mensajes de notificación para determinar qué acción quiere que realice el usuario. Excepto las barras de seguimiento, que usan los mensajes WM_HSCROLL y WM_VSCROLL para notificar a sus elementos primarios de cambios, los controles comunes envían notificaciones como mensajes WM_COMMAND o WM_NOTIFY , como se especifica en el tema de referencia de la notificación. Normalmente, las notificaciones anteriores (las que han estado en la API durante mucho tiempo) usan WM_COMMAND.

El parámetro lParam de WM_NOTIFY es la dirección de una estructura NMHDR o la dirección de una estructura mayor que incluye NMHDR como primer miembro. La estructura contiene el código de notificación e identifica el control común que envió el mensaje de notificación. El significado de los miembros restantes de la estructura, si existe, varía en función del código de notificación.

Cada tipo de control común tiene un conjunto correspondiente de códigos de notificación. La biblioteca de controles común también proporciona códigos de notificación que se pueden enviar mediante más de un tipo de control común. Consulte la documentación del control de interés para determinar qué códigos de notificación enviará y qué formato toman.

Para obtener código de ejemplo que muestra cómo controlar WM_NOTIFY mensajes, consulte el tema de referencia de ese mensaje.

Referencia de control general