Ricezione di notifiche da controlli comuni
I controlli comuni sono finestre figlio che inviano messaggi di notifica alla finestra padre quando si verificano eventi, ad esempio l'input dell'utente, nel controllo .
L'applicazione si basa su questi messaggi di notifica per determinare l'azione che l'utente vuole eseguire. I controlli più comuni inviano messaggi di notifica come messaggi di WM_NOTIFY. I controlli Windows inviano la maggior parte dei messaggi di notifica come WM_COMMAND messaggi. CWnd::OnNotify è il gestore per il messaggio WM_NOTIFY. Come con CWnd::OnCommand
, l'implementazione di invia il messaggio di OnNotify
notifica a OnCmdMsg
per la gestione nelle mappe messaggi. La voce della mappa messaggi per la gestione delle notifiche è ON_NOTIFY. Per altre informazioni, vedere La nota tecnica 61: ON_NOTIFY e messaggi di WM_NOTIFY.
In alternativa, una classe derivata può gestire i propri messaggi di notifica usando la "reflection dei messaggi". Per altre informazioni, vedere Technical Note 62: Message Reflection for Windows Controls.For more information, see Technical Note 62: Message Reflection for Windows Controls.
Recupero della posizione del cursore in un messaggio di notifica
In alcuni casi, è utile determinare la posizione corrente del cursore quando determinati messaggi di notifica vengono ricevuti da un controllo comune. Ad esempio, sarebbe utile determinare la posizione corrente del cursore quando un controllo comune riceve un messaggio di notifica NM_RCLICK.
Esiste un modo semplice per eseguire questa operazione chiamando CWnd::GetCurrentMessage
. Tuttavia, questo metodo recupera solo la posizione del cursore al momento dell'invio del messaggio. Poiché il cursore potrebbe essere stato spostato dopo l'invio del messaggio, è necessario chiamare CWnd::GetCursorPos
per ottenere la posizione corrente del cursore.
Nota
CWnd::GetCurrentMessage
deve essere chiamato solo all'interno di un gestore di messaggi.
Aggiungere il codice seguente al corpo del gestore dei messaggi di notifica (in questo esempio NM_RCLICK):
CPoint cursorPos;
cursorPos.x = GetCurrentMessage()->pt.x;
cursorPos.y = GetCurrentMessage()->pt.y;
A questo punto, la posizione del cursore del mouse viene archiviata nell'oggetto cursorPos
.