Frage

Ich frage mich, was (wenn überhaupt) die Differenz zwischen den beiden folgenden Meldung Fallen in MFC für die Funktion war, OnSize (..).

1 - Via Nachricht Karte:

BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
...
    ON_WM_SIZE()
..
END_MESSAGE_MAP()

2 - Via afx_message:

afx_msg type OnSize(...);

Sie scheinen austauschbar verwendet werden, die man verwendet werden soll oder es von anderen Faktoren abhängen?

War es hilfreich?

Lösung

Beide Teile sind notwendig, um eine Message-Handler zu einer Klasse hinzuzufügen. Die Nachricht Karte sollte in Ihrer Klasse deklariert werden, zusammen mit Erklärungen für alle Message-Handler-Funktionen (beispielsweise OnSize).

class CClassWnd : public CBaseClassWnd {
    ...
    afx_msg void OnSize(UINT nType, int cx, int cy);
    DECLARE_MESSAGE_MAP
};

afx_msg ist nur ein leerer Platzhalter Makro - es ist nicht eigentlich nichts tut, sondern immer durch Konvention enthalten

.

Die Meldung Karte dann in der Klasse der CPP-Datei definiert ist:

BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
    ON_WM_SIZE()
END_MESSAGE_MAP()

Diese Makros erzeugen für die Klasse eine Lookup-Tabelle, die durch das Fenster empfangenen Nachrichten können an den entsprechenden Handler-Funktionen geschickt werden. Die ON_WM_SIZE Makro erlaubt die wParam und lParam Nachrichtenparameter in der WM_SIZE Nachricht in aussagekräftiger Werte für die Nachrichtenhandhabungsfunktion (nType, cx und cy in diesem Fall) decodiert werden. MFC bietet Makros für die meisten Fenstermeldungen (WM_LBUTTONDOWN, WM_DESTROY, etc).

Sie finden weitere Informationen finden, wie die Nachrichtenkarten Arbeit in MFC hier auf MSDN.

Andere Tipps

afx_msg ist nur ein leeres Makro, es ist im Grunde gibt es nur zu bezeichnen, dass das Verfahren ein MFC-Meldungshandler für Lesbarkeit. Auch bei afx_msg dort müssen Sie noch einen Eintrag in der Meldungszuordnung haben.

Einige der Nachricht Windows sind bereits behandelt von MFC , so in diesen Fällen können Sie mit dem Hinzufügen von nur die Methode der abgeleiteten Klasse wegzukommen.

Zum Beispiel die CWnd Klasse (wie viele andere MFC-Klassen zu tun), die bereits Karten ein paar Windows-Nachrichten in es Nachricht Karte (dh ON_WM_DRAWITEM ON_WM_MEASUREITEM ON_WM_ENTERIDLE etc, etc).

Aber eine andere Meldung nicht bereits von MFC zugeordnet wird sowohl eine Klassenmethode und einen Eintrag in der Meldungszuordnung haben muß, für sie zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top