Obie części są niezbędne, aby dodać procedurę obsługi wiadomości do klasy. Mapa komunikatów powinna zostać zadeklarowana wewnątrz twojej klasy, razem z deklaracjami dla jakichkolwiek funkcji obsługi komunikatów (np. OnSize
).
class CClassWnd : public CBaseClassWnd {
...
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP
};
afx_msg
jest tylko pustym zastępczy makro - w rzeczywistości nie robić nic, ale zawsze jest wliczone umownie.
Komunikat mapa jest następnie zdefiniowane w pliku .cpp klasy za:
BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
ON_WM_SIZE()
END_MESSAGE_MAP()
Makra te generują tabeli odnośników do klasy, która pozwala wiadomości otrzymane przez okna, aby być wysłane do odpowiednich funkcji obsługi. Makro ON_WM_SIZE
zezwala na dekodowanie parametrów wiadomości i WM_SIZE
na bardziej znaczące wartości dla funkcji komunikatora (nType
, cx
i cy
w tym przypadku). MFC udostępnia makra dla większości wiadomości w oknie (WM_LBUTTONDOWN
, WM_DESTROY
itd.).
Możesz znaleźć więcej informacji o tym, jak działają mapy wiadomości w MFC here na MSDN.
Miło wiedzieć, że coś, nad czym zastanawiałem się przez jakiś czas. Może mam zbyt dużo czasu na rękach ...;) –