標籤:訊息映射 宏
在MFC中, OnWndMsg函數的處理過程如下:
1)首先,判斷訊息是否有訊息響應函數,例如OnLButtonDown()處理“左鍵按下”這一訊息。
2)判斷方法是在相應的視窗類別中尋找所需的訊息響應函數。這裡以MFC 的工程Draw為例,OnWndMsg會在CDrawTest.h中尋找,看看DECLARE_MESSAGE_MAP()之上,
兩個afx_msg注釋宏之間是否有相應的訊息響應函數的原型聲明,如下:
//CDrawTest.h
protected://{{AFX_MSG(CDrawView)afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//函數OnLButtonDown()的原型聲明//}}AFX_MSGDECLARE_MESSAGE_MAP()
接著,再到CDrawView.cpp中,看看BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()這兩個宏之間是否有相應的訊息映射宏,如下:
// CDrawView.cppIMPLEMENT_DYNCREATE(CDrawView, CView)BEGIN_MESSAGE_MAP(CDrawView, CView)//{{AFX_MSG_MAP(CDrawView)ON_WM_LBUTTONDOWN() //函數OnLButtonDown()在訊息映射宏之中//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()
3)如果通過1)、2)步驟,找到了訊息響應函數,那麼接著就會調用該響應函數,對訊息進行處理。
如果子類中沒有找到訊息響應函數,那麼就就給基類處理。
4)通過以上步驟,MFC就實現了具體的訊息映射,從而完成對訊息的響應。
5)函數OnLButtonDown()的實現: