消息映射

消息映射定义

就是相当于我在键盘摁下一个a程序可以接受到然后执行对应的函数

在MFC中实现:

消息映射宏

为了支持消息映射,MFC提供了下列宏:

消息映射的声明和分界宏

DECLARE_MESSAGE_MAP声明将在一个类中使用消息映射,把消息映射到函数(必须用在类声明中)
BEGIN_MESSAGE_MAP 开始消息映射的定义(必须用在类实现中)
END_MESSAGE_MAP 结束消息映射的定义(必须用在类实现中)

 

 

首先在头文件中对应需要的窗口框架中申明消息映射宏

 

然后再在cpp中对应的函数来实现,对应的函数可以在mfc类库的中文文档中查找

 1 //头文件
 2 #include <afxwin.h> //mfc头文件
 3 
 4 class MyApp :public CWinApp //CWinApp应用程序类
 5 {
 6 public:
 7     //程序入口
 8     virtual BOOL InitInstance();
 9 
10 };
11 
12 
13 class MyFrame :public CFrameWnd //窗口框架类
14 {
15 public:
16     MyFrame();
17 
18     //申明宏 提供消息映射机制
19     DECLARE_MESSAGE_MAP();
20     //申明对应消息映射调用的函数
21     afx_msg void OnLButtonDown(UINT, CPoint);
22     afx_msg void OnChar(UINT a, UINT, UINT);
23     afx_msg void OnPaint();
24 };
View Code
 1 #include"mfc.h"
 2 MyApp app; //全局应用程序对象,有且仅有一个
 3 
 4 BOOL MyApp::InitInstance()
 5 {
 6     //创建窗口
 7     MyFrame* frame = new MyFrame;
 8     //显示和更新
 9     frame->ShowWindow(SW_SHOWNORMAL);
10     frame->UpdateWindow();
11     m_pMainWnd = frame; //保存指向应用程序的主窗口的指针
12     return TRUE; //返回正常初始化
13 }
14 //分界宏
15 BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
16     ON_WM_LBUTTONDOWN()
17     ON_WM_CHAR()//键盘消息映射
18     ON_WM_PAINT()//绘图
19 END_MESSAGE_MAP()
20 
21 afx_msg void MyFrame::OnLButtonDown(UINT, CPoint point)
22 {
23     //TCHAR buf[1024];//TCHAR属于mfc的字符数组
24     //wsprintf(buf, TEXT("x = %d,y = %d"), point.x, point.y);//这里相当于sprintf
25     ////采用MessageBox() API来打印出来buf
26     //MessageBox(buf,_T("title"));
27     
28     //这里使用mfc的自己的字符串
29     CString str;
30     str.Format(TEXT("x = %d y=%d"), point.x, point.y);
31     MessageBox(str, _T("鼠标左键点击的窗口的坐标"));
32 }
33 
34 afx_msg void MyFrame::OnChar(UINT a, UINT, UINT)
35 {
36     CString str;
37     str.Format(TEXT("键盘按键为%c"), a);
38     MessageBox(str, _T("键盘按了什么健"));
39 }
40 
41 afx_msg void MyFrame::OnPaint()
42 {
43     CPaintDC dc(this);// 
44     dc.TextOutW(100, 100, TEXT("我爱你"));//画字
45     //画椭圆
46     dc.Ellipse(10, 10, 100, 100);
47     //两个点(x,y)和(x1,y1)
48     //就相当于对两个坐标画一个矩形然后对矩形画一个内切椭圆来处理
49 
50 
51 }
52 MyFrame::MyFrame()
53 {
54     Create(NULL, TEXT("mfc"));
55 }
View Code