Handler für Standardwindows-meldungen

Standardhandler für standardmäßige windows-meldungen (WM_) werden in der Klasse CWnd vordefiniert.Die Klassenbibliothek Handler für diese Namen basiert auf dem Namen der Meldung.Beispielsweise wird der Handler für die WM_PAINT Nachricht in CWnd wie deklariert:

afx_msg void OnPaint();

Das afx_msg-Schlüsselwort schlägt die Auswirkung des Schlüsselworts C++ virtual vor, indem die Handler aus anderen CWnd-Memberfunktionen unterschieden wird.Beachten Sie jedoch, dass diese Funktionen nicht virtuell sind. Stattdessen werden sie durch Meldungszuordnungen implementiert.Meldungszuordnungen sind nur aus den Standardwert präprozessor von Makros nicht von allen Erweiterungen der Programmiersprache C++ ab.Das afx_msg-Schlüsselwort wird in den Leerzeichen ein, nachdem es vorverarbeitet verfügt.

Um einen Handler zu überschreiben, der in einer Basisklasse definiert ist, definieren Sie einfach eine Funktion mit dem gleichen Prototyp in einer abgeleiteten Klasse den Handler für Meldungszuordnungseintrag und auszuführen.Ihr Handler "überschreibt" jeden Handler mit demselben Namen in allen von den Basisklassen Ihrer Klasse.

In einigen Fällen sollte der Handler der überschriebene Handler in der Basisklasse aufrufen, damit die Basisklasse und Windows die Nachricht an ausgeführt werden.Wenn Sie aufrufen, hängt der Basisklassen Klassenhandler in der Überschreibung von Fällen ab.Gelegentlich müssen Sie zuerst Klassenhandler den Basisklassen und manchmal zuletzt aufgerufen wird.Gelegentlich müssen Sie den Basisklassen für bedingte an, wenn Sie die Nachricht nicht verarbeiten.Möglicherweise möchten Sie den Basisklassen Klassenhandler aufrufen, bedingt, einen eigenen Handlercode je nach Wert oder Zustand auszuführen, die vom Basisklassen für zurückgegeben werden.

WarnhinweisVorsicht

Es ist nicht sicher, die Argumente zu ändern, die in einen Handler übergeben werden, wenn Sie beabsichtigen, sie zu einem Basisklassen Ereignishandler zu übergeben.Beispielsweise können Sie gereizt werden, um das nChar-Argument des OnChar-Handlers zu ändern (in Großbuchstaben konvertieren, z. B.)Dieses Verhalten ist, aber recht dunkel, wenn Sie diesen Effekt erreichen, müssen stattdessen mithilfe der CWnd-Memberfunktion SendMessage.

So bestimmen Sie die richtige Methode eine angegebene Meldung zu überschreiben?Wenn das Eigenschaftenfenster das Skelett der Handlerfunktion für eine bestimmte Meldung geschrieben wird:Ein OnCreate-Handler für WM_CREATE beschrieben, wie z. B. die sich in Form von der empfohlenen überschriebenen Memberfunktion.Das folgende Beispiel empfiehlt dass der Handler zuerst Klassenhandler ruf die Basisklasse und nur unter der Bedingung, dass keine gibt 1 fort.

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

   // TODO:  Add your specialized creation code here

   return 0;
}

Standardmäßig beginnen die Namen dieser Handler mit dem Präfix "." Einige dieser Handler keine Argumente akzeptieren, andere hingegen mehrere akzeptieren.Einige verfügen auch über einen Rückgabetyp void unterschiedlich.Die Standardhandler für alle WM_ Meldungen werden in der MFC-Referenz als Memberfunktionen der Klasse CWnd dokumentiert, deren Namen beginnen mit "." Die Memberfunktion Deklarationen in CWnd werden mit afx_msg vorangestellt.

Siehe auch

Konzepte

Deklarieren von Meldungshandler-Funktionen