MFC消息響應

▲通過類嚮導給類添加一個消息響應函數時(如在CMainFrame類中添加WM_CLOSE消息響應),會增加以下3代碼段:

1.頭文件CMainFrame.h類的定義中
//{{AFX_MSG(CMainFrame)      //註釋宏
afx_msg void OnClose();          //添加的消息響應函數原型聲明
//}}AFX_MSG                            //註釋宏

afx_msg也是一個宏,表示後面的函數原型爲消息響應函數原型。 

2.源文件MainFrame.cpp中

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CLOSE()                              //添加的宏
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

ON_WM_CLOSE()宏將消息WM_CLOSE與消息響應函數OnClose()關聯起來。

3.源文件MainFrame.cpp中

void CMainFrame::OnClose()
{
 // 響應消息時的處理代碼寫在此處
CFrameWnd::OnClose();
}

 

▲MFC的消息處理是靠調用OnWndMsg()來處理的,其過程是先檢查有沒有消息響應函數原型聲明(1中所述),再檢查有無消息響應函數關聯宏(2中所述),若檢查通過則用3中所述的函數響應指定消息,否則使用默認消息處理函數。

 

▲通過代碼添加的控件,若要添加消息響應函數,可以按照1,2,3的步驟手動寫代碼。但在2中,由於註釋宏之間的宏由類嚮導管理,因此,對於手動添加的代碼應寫在註釋宏之外。

 

▲從CCmdTarget派生的類可以接受WM_COMMAND消息,但不能接受標準消息
從CWnd派生的類可以接受標準消息和WM_COMMAND消息

▲WM_COMMAND消息首先發送給框架類,框架類再交給子窗口(視類),視類檢查是否有響應函數,有則處理返回,無則將消息交給文檔類,文檔類檢查是否有響應函數,有則處理返回,無則將消息交還給視類,視類又將消息交還給框架類,框架類檢查是否有響應函數,有則處理返回,無則將消息交給應用類,應用類完成消息的處理或返回。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章