Message Maps
Message Maps neboli Mapování zpráv je systém řízení a distribuce zpráv (myšleno zprávy systému) knihovny MFC, které zajišťuje registraci a správné přesměrování zpráv příslušné funkci.
Funkce
- registrace událostí (zpráv) Windows (vykreslování, změna velikosti okna…)
- přesměrování zpráv jejich obslužným rutinám (funkcím)
- registrace uživatelem definovaných zpráv, zejména v nabídkách a panelech nástrojů
Význam
Použití systému mapování zpráv pro distribuci zpráv skrz aplikaci má pozitivní vliv na složitost tříd a tudíž i na celkovou rychlost. Mapování spočívá v propojení jednotlivých zpráv (tyto zprávy jsou v MFC vyjádřeny celočíselnou hodnotou, která jednoznačně identifikuje druh zprávy) se členskými funkcemi třídy, která má zprávu zachytávat. Tím zcela odpadá potřeba virtuálních event handlerů (virtuální metody účelně definované v základní třídě k reagování na zprávy), které - kvůli značnému množství možných událostí - tak značně zatěžují odvozenou třídu z velké části nepoužitou implementací. Třídy MFC se však díky mapám zpráv uskromnily na ryze základní virtuální funkce, jako je např. "OnPaint" apod., které jsou zároveň implicitně mapovány, takže - pokud není třeba výchozí implementaci měnit - se vývojář může soustředit pouze na specifické vlastnosti jeho odvozené třídy.
Aplikace map zpráv
Mapy zpráv představují nelehký systém, který na první pohled není zcela srozumitelný. V MFC jsou však lehko ovladatelné pomocí několika maker, která skrývají tuto složitost pod jednoduchým názvem. Jsou to v prvé řadě makra "DECLARE_MESSAGE_MAP", které se vkládá do hlavičkového souboru třídy, a makra "BEGIN_MESSAGE_MAP" a "END_MESSAGE_MAP", vkládaná do souboru .cpp, mezi něž se vkládají definice propojení zpráv s členskými funkcemi definované třídy.
Definice propojení si opět vyžadují použití předdefinovaných maker pro zúhlednění a čitelnost kódu. Tato makra dodržují přísné názvosloví, díky němuž lze z názvu snadno vypozorovat druh zprávy, kterou zachytává. Až na výjimky je název makra odvozen od názvu zprávy, přičemž počáteční zkratka "WM_" je nahrazena zkratkou "ON_". Kupříkladu zpráva WM_PAINT je tedy mapována pomocí makra "ON_PAINT".
Druhy zpráv
Mezi základní definované zprávy systému Windows patří:
- WM_PAINT
- WM_SIZE
- WM_LBUTTONDOWN
- WM_COMMAND
Pomocí zprávy WM_COMMAND lze snadno zaregistrovat uživatelem definovanou zprávu. Jako příklad může sloužit změna barvy nebo velikosti objektu zobrazeného v okně. V nabídce, pravým tlačítkem nebo jiným způsobem budete chtít změnit velikost nebo barvu objektu. Pohodlným způsobem může sloužit použití WM_COMMAND.