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.