Sdílet prostřednictvím


Obslužné rutiny pro standardní zprávy systému Windows

Výchozí ovladače pro standardní zprávy systému Windows (WM_) jsou předdefinované třídy CWnd.Knihovna tříd vypočítá názvy pro tyto ovladače na název zprávy.Například obslužnou rutinu pro WM_PAINT zpráva je deklarován v CWnd jako:

afx_msg void OnPaint();

Afx_msg účinek C++ navrhne klíčové slovo virtuální klíčové slovo rozlišuje obslužných rutin z jiné CWnd funkce členů.Upozorňujeme však, že tyto funkce nejsou ve skutečnosti virtuální; místo toho jsou implementovány pomocí mapy zprávy.Mapy zprávy závisí výhradně na standardní makra preprocesoru, není na žádné rozšíření jazyka C++.Afx_msg klíčové slovo se překládá na prázdné místo po úpravě před zpracováním.

Potlačit obsluhu definované v základní třídě jednoduše definujte funkci s stejné prototypu v odvozené třídě a vytvořit položku mapy zprávy obslužné rutiny.Váš popisovač "přepíše" jakékoli zpracování se stejným názvem v žádné z vaší třídy základní třídy.

V některých případech by vaše popisovač volání Potlačené popisovač v základní třídě, tak základní třídy a systému Windows může pracovat ve zprávě.Kde volání rutiny základní třída v přepsání vaší závisí na okolnostech.Někdy musíte nejprve volání rutiny základní třída a někdy poslední.Někdy volání rutiny základní třída podmíněně, pokud se rozhodnete sami zpracovat zprávu.Někdy by volání rutiny základní třída pak podmíněně spustit vlastní kód zpracování, v závislosti na hodnotě nebo stav vrácený popisovač základní třída.

Poznámka k upozorněníUpozornění

Není bezpečné upravit argumenty předané do obsluhu, pokud máte v úmyslu předat obsluze základní třída.Například můžete svádět k úpravě nChar argument OnChar popisovač (převést na velká písmena, například).Toto chování je poměrně zakrývají, ale potřebujete-li provést tento efekt použít CWnd členské funkce SendMessage místo.

Jak můžete určit správný způsob potlačit danou zprávu?Když okno Vlastnosti zapíše kostra funkci zpracování zprávy – OnCreate obslužnou rutinu pro WM_CREATE, například – jej sketches ve formě doporučené Potlačené členské funkce.Následující příklad doporučuje obslužné nejprve základní třída popisovač volání a pokračovat pouze pod podmínkou, že nevrací –1.

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CFormView::OnCreate(lpCreateStruct) == -1)
      return -1;

   // TODO:  Add your specialized creation code here

   return 0;
}

Úmluvou názvy těchto obsluhy začíná předponou "." Některé tyto ovladače během několika ostatními nezbytná žádné argumenty.Některé také obsahovat návratový typ než void.Výchozí ovladače pro všechny WM_ zpráv jsou popsány v MFC odkaz jako funkce členů třídy CWnd jejichž názvy začínají řetězcem "Na". Deklarace funkce člena v CWnd jsou s předponou afx_msg.

Viz také

Koncepty

Deklarování funkce zpracování zpráv