Recebendo notificação de controles comuns
Controles comuns são janelas filho que enviam mensagens de notificação à janela pai quando eventos, como entrada do usuário, ocorrem no controle.
O aplicativo depende dessas mensagens de notificação para determinar qual ação o usuário quer que execute. Os controles mais comuns enviam as mensagens de notificação como mensagens WM_NOTIFY. Os controles do Windows enviam a maioria das mensagens de notificação como mensagens WM_COMMAND. CWnd::OnNotify é o manipulador para a mensagem WM_NOTIFY. Assim como CWnd::OnCommand
, a implementação de OnNotify
despacha a mensagem de notificação para OnCmdMsg
para manipulação em mapas de mensagens. A entrada do mapa de mensagens para manipulação de notificações é ON_NOTIFY. Para obter mais informações, consulte Nota técnica 61: mensagens ON_NOTIFY e WM_NOTIFY.
Como alternativa, uma classe derivada poderá manipular as próprias mensagens de notificação usando "reflexão de mensagem". Para obter mais informações, consulte Nota técnica 62: reflexão de mensagem para controles do Windows.
Recuperar a posição do cursor em uma mensagem de notificação
Às vezes, é útil determinar a posição atual do cursor quando certas mensagens de notificação são recebidas por um controle comum. Por exemplo, é útil determinar a localização atual do cursor quando um controle comum receber uma mensagem de notificação NM_RCLICK.
Há uma maneira simples de fazer isso chamando CWnd::GetCurrentMessage
. No entanto, esse método apenas recupera a posição do cursor no momento em que a mensagem foi enviada. Como o cursor poderá ser removido após o envio da mensagem, será necessário chamar CWnd::GetCursorPos
para obter a posição atual do cursor.
Observação
CWnd::GetCurrentMessage
somente deverá ser chamado dentro de um manipulador de mensagens.
Adicione o seguinte código ao corpo do manipulador de mensagens de notificação (nesse exemplo, NM_RCLICK):
CPoint cursorPos;
cursorPos.x = GetCurrentMessage()->pt.x;
cursorPos.y = GetCurrentMessage()->pt.y;
Nesse ponto, a localização do cursor do mouse é armazenada no objeto cursorPos
.