Gestori per i messaggi Windows standard
I gestori predefiniti per i messaggi standard di windows (WM_) sono predefiniti della classe CWnd.La libreria di classi si basa nomi per questi gestori sul nome del messaggio.Ad esempio, il gestore del messaggio di WM_PAINT viene dichiarato in CWnd come:
afx_msg void OnPaint();
La parola chiave di afx_msg suggerisce l'effetto della parola chiave C++ virtual distinzione i gestori da altre funzioni membro di CWnd .Si noti, tuttavia, che queste funzioni non sono effettivamente virtuali; anziché vengono implementate dalle mappe dei messaggi.Le mappe messaggi dipende unicamente da macro standard del preprocessore, non dalle estensioni al linguaggio C++.Le risoluzioni di parole chiave di afx_msg a spazio vuoto dopo la pre-elaborazione.
Per eseguire l'override di un gestore definito in una classe base, definire semplicemente una funzione con lo stesso prototipo nella classe derivata e per fare una voce della mappa messaggi per il gestore.Il gestore “esegue l'override di„ qualsiasi gestore dello stesso nome in una qualsiasi delle classi base della classe.
In alcuni casi, il gestore deve chiamare il gestore sottoposto a override nella classe base in modo dalla classe base e le finestre possono operare sul messaggio.Quando si chiama il gestore della classe base nell'override dipende dalle condizioni.Talvolta è necessario chiamare innanzitutto e talvolta l'ultima volta che il gestore della classe base.Talvolta chiamate in modo condizionale il gestore della classe base, se si sceglie di non gestire il messaggio manualmente.Talvolta è necessario chiamare un gestore di classi base, in modo condizionale per eseguire il codice del gestore, a seconda del valore o lo stato restituito dal gestore della classe base.
Attenzione |
---|
Non è possibile modificare gli argomenti è stato trasformato un gestore se si intende passarli a un gestore di classi base.Ad esempio, la tentazione di modificare l'argomento di nChar del gestore di OnChar (per la conversione in maiuscolo, ad esempio.Questo comportamento è abbastanza riferimento, ma se è necessario ottenere questo risultato, viene utilizzata la funzione membro SendMessage di CWnd anziché. |
Come determinare la modalità corretta per eseguire l'override di un messaggio specificato?Quando la Finestra Proprietà scrive lo scheletro della funzione di gestione per un messaggio specificato — un gestore di OnCreate per WM_CREATE, ad esempio — schizza sotto forma di funzione membro sottoposta a override consigliata.Nell'esempio consigliabile che la prima chiamata del gestore il gestore della classe base e continua solo a condizione che non restituisca a 1.
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
Per convenzione, i nomi di questi gestori iniziano con il prefisso “in„. Alcuni di questi gestori non accetta argomenti, mentre altri accettano diversi.Alcuni dispongono inoltre di un tipo restituito diverso da void.I gestori predefiniti per tutti i messaggi di WM_ documentati in riferimenti alla libreria MFC come funzioni membro di classe CWnd dei cui nomi iniziano con “a„. Le dichiarazioni di funzione membro in CWnd sono preceduti da afx_msg.