1.消息映射
消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTTONDOWN消息的处理程序,然后就调用
OnButtonDown。
2.消息映射机制
2.1 声明宏 写到.h中
![](https://img-blog.csdnimg.cn/img_convert/809b6d45aeb3ce149c3c70b1f59f59e0.png)
2.2 分界宏写到.cpp中
![](https://img-blog.csdnimg.cn/img_convert/e4283b7a3c50047805692005f4d28c80.png)
2.3 找消息宏 写到 分界宏 中间
![](https://img-blog.csdnimg.cn/img_convert/247361357c2873b170115f7756a8bf60.png)
2.4 把函数 原型声明 写到.h中
![](https://img-blog.csdnimg.cn/img_convert/250cde97198aec1f3ee7fcf72f7e0b70.png)
2.5 函数的实现 写到.cpp中
2.6 鼠标、键盘、绘图
mfc.h
#include<afxwin.h> //mfc头文件
class MyApp :public CWinApp //CWinApp应用程序类
{
public:
//程序入口
virtual BOOL InitInstance();
};
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();
};
mfc.cpp
#include "mfc.h"
MyApp app; //全局应用程序对象,有且仅有一个
BOOL MyApp::InitInstance()
{
//创建窗口
MyFrame *frame = new MyFrame;
//显示和更新
frame->ShowWindow(SW_SHOWNORMAL);
frame->UpdateWindow();
m_pMainWnd = frame; //保存指向应用程序的主窗口的指针
return TRUE;//返回正常初始化
}
//分界宏
//参数:
//MyFrame 指定消息映射所属的类的名字。
//CFrameWnd 指定theClass的基类的名字。
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
ON_WM_LBUTTONDOWN() //鼠标左键按下
ON_WM_CHAR() //键盘
ON_WM_PAINT()//绘图宏
END_MESSAGE_MAP();
MyFrame::MyFrame()
{
Create(NULL, TEXT("fist mfc"));
}
void MyFrame::OnLButtonDown(UINT, CPoint point)
{
/*
TCHAR buf[1024];
wsprintf(buf, TEXT("x=%d,y=%d"),point.x,point.y);
MessageBox(buf);
*/
//mfc中的字符串 CString
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);
dc.TextOutA(623, 550, TEXT("gogogogogo"));
//画椭圆
dc.Ellipse(100,100,150,150);
}