Compartir a través de


Recibir notificaciones de los controles comunes

Los controles comunes son ventanas secundarias que envían mensajes de notificación a la ventana primaria cuando los eventos, como 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. Los controles más comunes envían mensajes de notificación como mensajes WM_NOTIFY. Los controles de Windows envían la mayoría de los mensajes de notificación como mensajes WM_COMMAND. CWnd::OnNotify es el controlador del mensaje de WM_NOTIFY. Al igual que con CWnd::OnCommand, la implementación envía el mensaje de notificación de OnNotify a OnCmdMsg para su gestión en mapas de mensajes. La entrada de mapa de mensajes para gestionar las notificaciones es ON_NOTIFY. Para obtener más información, vea Nota técnica 61: ON_NOTIFY y mensajes de WM_NOTIFY.

Como alternativa, una clase derivada puede controlar sus propios mensajes de notificación mediante "reflexión de mensajes". Para obtener más información, vea Nota técnica 62: Reflexión de mensajes para controles de Windows.

Recuperar la posición del cursor en un mensaje de notificación

En ocasiones, resulta útil determinar la posición actual del cursor cuando un control común recibe determinados mensajes de notificación. Por ejemplo, sería útil determinar la ubicación actual del cursor cuando un control común recibe un mensaje de notificación de NM_RCLICK.

Hay una manera sencilla de lograrlo mediante una llamada a CWnd::GetCurrentMessage. Sin embargo, este método solo recupera la posición del cursor en el momento en que se envió el mensaje. Dado que es posible que el cursor se haya movido desde que se envió el mensaje, debe llamar CWnd::GetCursorPos a para obtener la posición actual del cursor.

Nota:

CWnd::GetCurrentMessage solo debe ser llamado dentro de un controlador de mensajes.

Agregue el código siguiente al cuerpo del controlador de mensajes de notificación (en este ejemplo, NM_RCLICK):

CPoint cursorPos;
cursorPos.x = GetCurrentMessage()->pt.x;
cursorPos.y = GetCurrentMessage()->pt.y;

En este punto, la ubicación del cursor del mouse se almacena en el cursorPos objeto .

Consulte también

Hacer y usar controles
Mandos