MFC消息映射机制
消息映射是一个将消息和成员函数关联起来的表。如果架构窗口接收到了一个消息,MFC会对其消息映射进行搜寻,如果找到消息映射的对应函数,则执行该函数。
要创建消息映射首先要在头文件的架构窗口类中声明消息映射宏:
class MyFrame:public CFrameWnd
{
public:
MyFrame();
DECLARE_MESSAGE_MAP()//消息映射宏
}
声明完成后在源文件中添加消息映射的开始与结束宏,开始与结束宏之间添加需要处理的消息的宏。
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)//开始宏
ON_WM_LBUTTONDOWN()//鼠标左键按下的消息处理函数
ON_WM_CHAR()//从键盘输入
ON_WM_PAINT()//画画
END_MESSAGE_MAP()//结束宏
这部分代码要写在函数外面。
上述代码写完后,要在头文件中声明要处理消息的函数原型,并在源文件中写下相应的函数。
要处理消息的函数原型声明:
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();//画画
};
相应函数的内容:
void MyFrame::OnLButtonDown(UINT, CPoint point)
{
TCHAR buf[1024];
wsprintf(buf, TEXT("x = %d,y = %d"), point.x, point.y);
MessageBox(buf);
}
void MyFrame::OnChar(UINT key, UINT, UINT)
{
CString str;
str.Format(TEXT("你按下了%c键"), key);
MessageBox(str);
}
void MyFrame::OnPaint()
{
CPaintDC dc(this);
dc.TextOut(100,100,TEXT("自作聪明"));
dc.Ellipse(10, 15, 150, 125);
}
OnLButtonDown:点击鼠标左键,将点击位置以对话框的形式弹出。
OnChar:从键盘接收一个输入,将输入的字符以对话框的形式显示。
OnPaint:画图操作。