Recibir notificaciones de los controles comunes

Los controles comunes son ventanas secundarias que envían mensajes de notificación a la ventana primaria cuando se producen eventos en el control, como una entrada del usuario.

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 WM_NOTIFY. Al igual que con CWnd::OnCommand, la implementación de OnNotify envía el mensaje de notificación a OnCmdMsg para controlar las asignaciones de mensajes. La entrada de asignación de mensajes para controlar las notificaciones es ON_NOTIFY. Para más información, vea Nota técnica 61: mensajes ON_NOTIFY y WM_NOTIFY.

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

Recuperación de 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 NM_RCLICK.

Hay una manera sencilla de hacerlo 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 a CWnd::GetCursorPos para obtener la posición actual del cursor.

Nota:

CWnd::GetCurrentMessage solo se debe llamar a 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 momento, la ubicación del cursor del mouse se almacena en el objeto cursorPos.

Consulte también

Creación y uso de controles
Controles