消息映射
消息映射定义
就是相当于我在键盘摁下一个a程序可以接受到然后执行对应的函数
在MFC中实现:
消息映射宏
为了支持消息映射,MFC提供了下列宏:
消息映射的声明和分界宏
DECLARE_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 };
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 }