一、介绍
消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理 WM_LBUTTONDOWN 消息的处理程序,然后就调用 OnLButtonDown
二、具体实现
1、所操作类中,声明消息映射宏
//mfc.h: class MyFrame:public CFrameWnd //窗口框架类 { public: MyFrame(); //声明宏 提供消息映射机制 DECLARE_MESSAGE_MAP();
afx_msg void OnLButtonDown(UINT, CPoint);
afx_msg void OnChar(UINT, UINT, UINT);
afx_msg void OnPaint(); };
2、通过放置标识消息的宏来执行消息映射,相应的类将在对 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 的调用之间处理消息
//mfc.cpp: //分界宏 BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd) ON_WM_LBUTTONDOWN() //鼠标左键按下 ON_WM_CHAR() //键盘 ON_WM_PAINT() //绘图 END_MESSAGE_MAP() MyFrame::MyFrame() { Create(NULL, TEXT("mfc")); } void MyFrame::OnLButtonDown(UINT, CPoint point) { /*TCHAR buf[1024]; wsprintf(buf, TEXT("x = %d,y = %d"), point.x, point.y); MessageBox(buf);*/ CString str; str.Format(TEXT("x = %d,y = %d"), point.x, point.y); MessageBox(str); } void MyFrame::OnChar(UINT key, UINT, UINT) { CString str; str.Format(TEXT("按下了%c键"), key); MessageBox(str); } void MyFrame::OnPaint() { CPaintDC dc(this); //CDC里找其他的能画的图形 dc.TextOutW(100, 100, TEXT("为了部落")); //画椭圆 dc.Ellipse(10, 10, 100, 100); }
3、对应的消息处理函数分别在类中定义,类外声明