Mappe messaggi derivate
Durante la gestione dei messaggi, controllare la propria mappa messaggi di una classe non corrisponde alla fine della storia della mappa messaggi.Ciò che si verifica se la classe CMyView (derivato da CView) non ha voce corrispondente per un messaggio?
Tenere presente che CView, la classe base di CMyView, viene derivata a sua volta da CWnd.Pertanto CMyViewèCView e vieneCWnd.Ognuna di queste classi dispone della propria mappa messaggi.La figura “una gerarchia di visualizzazione„ seguente viene mostrata la relazione gerarchica delle classi, ma conserva presente che un oggetto di CMyView è un unico oggetto con le caratteristiche di tutte e tre le classi.
Una gerarchia di visualizzazione
Se pertanto un messaggio non corrispondono a nella mappa messaggi di entity_CODECMyView della classe, il framework cerca anche la mappa messaggi della relativa classe base immediata.La macro di BEGIN_MESSAGE_MAP all'inizio della mappa messaggi specifica due nomi della classe come argomenti:
BEGIN_MESSAGE_MAP(CMyView, CFormView)
Il primo argomento denominare la classe a cui la mappa messaggi appartiene.Il secondo argomento viene fornita una connessione alla classe di base immediata — CView qui — in modo che il framework può trovare la mappa messaggi, anche.
I gestori di messaggi forniti in una classe base sono ereditati così dalla classe derivata.Ciò è molto simile alle funzioni membro virtuali normali senza la necessità di rendere tutte le funzioni membro del gestore virtuali.
Se nessun gestore viene trovato in una qualsiasi delle mappe dei messaggi della classe base, l'elaborazione predefinita del messaggio viene eseguita.Se il messaggio è un comando, il framework di destinazione nella destinazione comando seguente.Se si tratta di un messaggio standard di windows, il messaggio viene passato alla routine della finestra predefinita appropriata.
Per velocizzare la corrispondenza della mappa messaggi, il framework memorizzata nella cache le corrispondenze recenti sulla probabilità che riceverà lo stesso messaggio.Come conseguenza di questa è che il framework elabora abbastanza efficiente i messaggi non gestiti.Le mappe messaggi sono inoltre che richiede meno efficienti delle implementazioni che utilizzano funzioni virtuali.