Freigeben über


Handler für Windows-Standardmeldungen

Standardhandler für Standardwindows-meldungen (WM_) werden in der Klasse CWnd vordefinierten. Die Klassenbibliothek basiert Namen für diese Handler auf dem Meldungsnamen. Beispielsweise wird der Handler für WM_PAINT die Meldung wie in CWnd deklariert:

afx_msg void OnPaint();

Das Schlüsselwort afx_msg schlägt die Auswirkungen des Schlüsselworts C++ virtuell vor, indem die Handler von anderen Memberfunktionen CWnd unterscheidet. Beachten Sie jedoch dass diese Funktionen nicht tatsächlich virtuell sind; sie werden stattdessen durch Meldungszuordnungen implementiert. Meldungszuordnungen hängen nur von den Standardpräprozessormakros, nicht aus allen möglichen Erweiterungen zur Programmiersprache C++ ab. Das Schlüsselwort afx_msg löst zum Leerstellen auf, nachdem es vorverarbeitet hat.

Um einen Handler zu überschreiben, der in einer Basisklasse definiert ist, definieren Sie eine Funktion mit demselben Prototyp in der abgeleiteten Klasse und einen Eintrag in der Meldungszuordnung für den Handler zu machen. Der Handler "überschreibt" jeden Handler des gleichen Namens in einem aus Basisklassen der Klasse.

In bestimmten Fällen sollte Ihr Handler den überschriebenen Handler in der Basisklasse aufrufen, sodass die Basisklasse und Windows die Meldung angewendet werden. Wo Sie aufrufen, hängt der Basisklassenhandler in der Überschreibung von den Umständen ab. Manchmal müssen Sie den Handler zuerst und manchmal zuletzt aufrufen. Manchmal wird der Basisklassenhandler bedingt auf, wenn Sie festlegen, dass die Meldung nicht bearbeiten können. Gelegentlich soll der Basisklassenhandler aufrufen, dann, bedingt eigenen Handlercode, je nach Wert oder dem Zustand auszuführen, die vom Handler zurückgegeben werden.

Warnung

Es ist nicht sicher, die Argumente zu ändern, die in einen Handler übergeben werden, wenn Sie beabsichtigen, diese in einen Handler zu übergeben.Beispielsweise verwenden Sie Möglicherweise werden, um das nChar-Argument des Handlers OnChar zu ändern (in Großbuchstaben konvertiert, beispielsweise).Dieses Verhalten ist, aber recht dunkel, wenn Sie diesen Effekt erledigen müssen, verwendet die CWnd-Memberfunktion stattdessen SendMessage.

So bestimmen Sie die korrekte Methode, eine bestimmte Meldung zu überschreiben? Wenn das Eigenschaftenfenster das Skelett der Handlerfunktion für eine bestimmte Meldung schreibt ein OnCreate-Handler für WM_CREATE, z - er beschrieben in Form der empfohlenen überschriebenen Memberfunktion. Im folgenden Beispiel wird Handlererste dass der ruf der Basisklassenhandler und wird nur unter der Bedingung, dass es erst beendet wird - 1 fort.

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

   // TODO:  Add your specialized creation code here 

   return 0;
}

Konventionell beginnen die Namen dieser Handler mit dem Präfix "an." Einige dieser Handler nehmen keine Argumente, während andere mehrere nehmen. Einigen auch einen Rückgabetyp als void. Der Standardhandler für alle WM_ Meldungen werden in der MFC-Referenz als Memberfunktionen der Klasse CWnd dokumentiert, deren Namen beginnen mit "." Die Memberfunktionsdeklarationen in CWnd werden mit afx_msg vorangestellt.

Siehe auch

Konzepte

Deklarieren von Meldungshandlerfunktionen