Ricevendo notifiche dai controlli comuni

I controlli comuni sono finestre figlio che inviano messaggi di notifica alla finestra padre quando gli eventi, come input dall'utente, si verificano nel controllo.

L'applicazione si basa su questi messaggi di notifica per determinare l'azione che l'utente lo desidera utilizzare.La maggior parte dei controlli inviano messaggi di notifica come messaggi di WM_NOTIFY .I controlli Windows inviano la maggior parte dei messaggi di notifica come messaggi di WM_COMMAND .CWnd::OnNotify è il gestore del messaggio di WM_NOTIFY .Come con CWnd::OnCommand, l'implementazione di OnNotify invia il messaggio di notifica a OnCmdMsg per la gestione delle mappe dei messaggi.La voce della mappa messaggi per gestire le notifiche è ON_NOTIFY.Per ulteriori informazioni, vedere nota tecnica 61: messaggi di WM_NOTIFY e di ON_NOTIFY.

In alternativa, una classe derivata può gestire i propri messaggi di notifica mediante “di reflection di messaggio„. Per ulteriori informazioni, vedere nota tecnica 62: reflection di messaggio per i controlli Windows.

Recuperare la posizione del cursore in un messaggio di notifica

Occasionalmente, è utile determinare la posizione corrente del cursore quando determinati messaggi di notifica vengono ricevuti da un controllo comune.Ad esempio, è opportuno determinare la posizione corrente del cursore quando un controllo comune riceve un messaggio di notifica di NM_RCLICK .

Esiste un modo semplice per ottenere questo risultato chiamando CWnd::GetCurrentMessage.Tuttavia, questo metodo recupera solo la posizione del cursore quando il messaggio è stato inviato.Poiché il cursore può essere spostato poiché il messaggio è stato inviato è necessario chiamare CWnd::GetCursorPos per ottenere la posizione corrente del cursore.

[!NOTA]

CWnd::GetCurrentMessage deve essere chiamato solo all'interno di un gestore messaggi.

Aggiungere il seguente codice al corpo del gestore di messaggio di notifica (in questo esempio, NM_RCLICK):

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

In questa fase, la posizione del cursore del mouse viene memorizzata nell'oggetto di cursorPos .

Vedere anche

Riferimenti

Utilizzando e l'utilizzo dei controlli

Concetti

Controlli (MFC)