4.1MFC消息映射机制
为CMainFrame类添加WM_LBUTTONDOWN消息响应函数,在该消息相应函数的内部调用MessageBox函数,这里的MessageBox函数与SDK里的不同,少了窗口句柄的函数。因为CWnd类有成员变量m_hWnd,用来保存当前窗口句柄,CMainFrame类继承与CWnd类,同样地也继承了该成员变量。
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
MessageBox("MainFrame Clicked!");
CFrameWnd::OnLButtonDown(nFlags, point);
}
但是运行程序后并没有出现相应的消息框。
给CView类添加消息响应函数:
换另一种方法,打开View菜单,选择ClassWizard。
Message Maps:添加或者删除消息处理函数、成员函数,或者类。
Add Function->Edit Code
删除消息响应函数,直接在该函数鼠标右键,选择Delete
4.1.1消息映射机制
增加一个消息响应函数之后,在源文件处都会增加三处代码。
消息响应函数的原型:
TestView.h中,
// Generated message map functions
protected:
//{{AFX_MSG(CTestView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
afx_msg注释宏,该宏表示一个消息响应函数的声明。
ON_WM_LBUTTONDOWN消息映射宏:
TestView.cpp文件中,
BEGIN_MESSAGE_MAP(CTestView, CView)
//{{AFX_MSG_MAP(CTestView)
ON_WM_LBUTTONDOWN()
//}}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()
将WM_LBUTTONDOWN消息与消息响应函数关联起来。
消息响应函数的定义:
在TestView.cpp文件中,
// CTestView message handlers
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
MessageBox("View Clicked!");
CView::OnLButtonDown(nFlags, point);
}
先找消息响应函数的声明,然后找消息映射宏,最后找消息处理函数。