Her iki parça da bir sınıfa bir ileti işleyicisi eklemek için gereklidir. Mesaj haritası, herhangi bir mesaj işleyici işlevi için bildirimlerle birlikte sınıfınızın içinde beyan edilmelidir (ör. OnSize
). aslında bir şey yapmaz, ama her zaman kongre tarafından dahildir -
class CClassWnd : public CBaseClassWnd {
...
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP
};
afx_msg
sadece boş yer tutucu makrosudur.
mesajı haritası
sonra sınıfın .cpp dosyasında tanımlanır:
BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
ON_WM_SIZE()
END_MESSAGE_MAP()
Bu makrolar pencere tarafından alınan mesajları ilgili işleyici fonksiyonları sevk edilmesini sağlar sınıf için bir arama tablosu oluşturur. ON_WM_SIZE
makro WM_SIZE
mesajda wParam
ve lParam
mesajı parametreleri ileti işleyicisi işlevi (bu durumda nType
, cx
ve cy
) için daha anlamlı değerlere deşifre edilmesini sağlar. MFC, çoğu pencere mesajı için makrolar sağlar (WM_LBUTTONDOWN
, WM_DESTROY
, vb.).
İleti haritalarının, MSDN'de MFC here'da nasıl çalıştığı hakkında daha fazla bilgi bulabilirsiniz.
Bunu bilmek güzel, bir süredir merak ettiğim bir şey. Belki ellerimde çok fazla zamanım var ...;) –