OnWndMsg函式的處理過程

sanqima發表於2014-06-22

    在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_MSG
	DECLARE_MESSAGE_MAP()

   接著,再到CDrawView.cpp中,看看BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()這兩個巨集之間是否有相應的訊息對映巨集,如下:

// CDrawView.cpp

IMPLEMENT_DYNCREATE(CDrawView, CView)

BEGIN_MESSAGE_MAP(CDrawView, CView)
	//{{AFX_MSG_MAP(CDrawView)
	ON_WM_LBUTTONDOWN() //函式OnLButtonDown()在訊息對映巨集之中
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_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()的實現:



 

相關文章