Sdílet prostřednictvím


Mapy odvozených zpráv

Při zpracování zpráv není kontrola vlastní mapy zpráv třídy na konci scénáře mapy zpráv. Co se stane, když třída CMyView (odvozená z CView) nemá pro zprávu žádnou odpovídající položku?

Mějte na paměti, že CViewzákladní třída CMyView, je odvozena z CWnd. Tak CMyViewje a CView je CWndto . Každá z těchto tříd má svou vlastní mapu zpráv. Následující obrázek znázorňuje hierarchický vztah tříd, ale mějte na paměti, že CMyView objekt je jediný objekt, který má vlastnosti všech tří tříd.

Diagram showing the hierarchy of a view.
Hierarchie zobrazení

Pokud nelze zprávu spárovat v mapě zpráv třídy CMyView, architektura také prohledá mapu zpráv bezprostřední základní třídy. Makro BEGIN_MESSAGE_MAP na začátku mapy zpráv určuje jako argumenty dva názvy tříd:

BEGIN_MESSAGE_MAP(CMyView, CView)

První argument pojmenuje třídu, do které patří mapa zprávy. Druhý argument poskytuje spojení s okamžitou základní třídou, v tomto případě CView, takže architektura může prohledávat i mapu zpráv.

Obslužné rutiny zpráv poskytované v základní třídě jsou tedy zděděné odvozenou třídou. To je velmi podobné normálním virtuálním členským funkcím, aniž byste museli všechny členské funkce obslužné rutiny virtuální.

Pokud se v žádné mapě zpráv základní třídy nenajde žádná obslužná rutina, provede se výchozí zpracování zprávy. Pokud je zpráva příkazem, architektura ji směruje do dalšího cíle příkazu. Pokud se jedná o standardní zprávu systému Windows, zpráva se předá příslušné výchozí proceduře okna.

Aby bylo možné urychlit porovnávání map zpráv, architektura ukládá do mezipaměti poslední shody s pravděpodobností, že se stejná zpráva znovu zobrazí. Jedním z důsledků je, že architektura zpracovává neošetřené zprávy poměrně efektivně. Mapy zpráv jsou také efektivnější než implementace, které používají virtuální funkce.

Viz také

Jak framework prohledává mapy zpráv