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消息首先发送给框架类,框架类再交给子窗口(视类),视类检查是否有响应函数,有则处理返回,无则将消息交给文档类,文档类检查是否有响应函数,有则处理返回,无则将消息交还给视类,视类又将消息交还给框架类,框架类检查是否有响应函数,有则处理返回,无则将消息交给应用类,应用类完成消息的处理或返回。

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