MFC消息映射机制

mac2022-06-30  90

四、消息映射机制

4.1 消息映射的声明宏(DECLARE_MESSAGE_MAP())—写到.h文件中

4.2 消息映射的分界宏(BEGIN_MESSAGE_MAP()、 END_MESSAGE_MAP())—写到.cpp文件中

4.3 找消息处理函数的映射入口—写到 分界宏 中间

4.4 把消息处理函数的函数原型的声明—写到.h文件中

4.5 把消息处理函数的函数原型的实现—写到.cpp文件中

 

 

4.1 消息映射的声明宏(DECLARE_MESSAGE_MAP())—写到.h文件中

4.2 消息映射的分界宏(BEGIN_MESSAGE_MAP() END_MESSAGE_MAP())—写到.cpp文件中

4.3 找消息处理函数的映射入口—写到 分界宏 中间

4.4 把消息处理函数的函数原型的声明—写到.h文件中

4.5 把消息处理函数的函数原型的实现—写到.cpp文件中

 

比如:键盘消息处理函数的映射入口为ON_WM_CHAR()

         键盘消息处理函数的函数原型为afx_msg void OnChar(UINT, UINT, UINT);

还有鼠标按下消息ON_WM_LBUTTONDOWN(),绘图消息ON_WM_PAINT()

 

 

示例如下:

1、mfc.h代码如下:

#include <afxwin.h>                //mfc的头文件

//类1 class MyApp :public CWinApp        //CWinApp应用程序类 { public:     //程序入口     virtual BOOL InitInstance();

};

//类2 class MyFrame:public CFrameWnd     //窗口框架类 { public:     MyFrame();

    /*     为了支持消息映射,MFC提供了下列宏:     消息映射的声明宏:         DECLARE_MESSAGE_MAP 声明将在一个类中使用消息映射,把消息映射到函数(必须用在类声明中)     消息映射的分界宏:         BEGIN_MESSAGE_MAP 开始消息映射的定义(必须用在类实现中)         END_MESSAGE_MAP 结束消息映射的定义(必须用在类实现中)     */      DECLARE_MESSAGE_MAP()         //在窗口框架类的声明中:写消息映射的声明宏

    //函数原型     afx_msg void OnLButtonDown(UINT, CPoint);

    afx_msg void OnChar(UINT, UINT, UINT);

    afx_msg void OnPaint(); };  

2、mfc.cpp中的代码如下:

/*     函数实现 */

#include "mfc.h"

MyApp app;                        //全局应用程序对象,有且仅有一个

BOOL MyApp::InitInstance()        //实现类1中的虚函数 {     /*     分两步构造一个CFrameWnd对象。     首先,调用构造函数来构造CFrameWnd对象;     然后,调用Create来构造Windows框架窗口并把它附加给CFrameWnd对象;     Create初始化窗口的类名、窗口名,登记它的风格、父窗口和相关菜单的缺省值。     */     //1.创建窗口对象     MyFrame* frame = new MyFrame;

    //2.显示和更新     frame->ShowWindow(SW_SHOWNORMAL);     frame->UpdateWindow();

    //3.保存指向应用程序的主窗口的指针     m_pMainWnd = frame;

    return  TRUE;                //返回正常的初始化 }

/* 为了支持消息映射,MFC提供了下列宏: 声明宏: DECLARE_MESSAGE_MAP 声明将在一个类中使用消息映射,把消息映射到函数(必须用在类声明中) 分界宏: BEGIN_MESSAGE_MAP 开始消息映射的定义(必须用在类实现中) END_MESSAGE_MAP 结束消息映射的定义(必须用在类实现中) */ //分界宏 BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)     //将消息映射入口 写到分界宏之间     ON_WM_LBUTTONDOWN()            //鼠标左键按下消息     ON_WM_CHAR()                //键盘     ON_WM_PAINT()                //绘图 END_MESSAGE_MAP()

MyFrame::MyFrame()                //实现类2中的虚函数 {     Create(NULL, TEXT("mfc")); }

//1.鼠标 void MyFrame::OnLButtonDown(UINT, CPoint point) {     /*方法1:     TCHAR buf[1024];     wsprintf(buf, TEXT("x=%d,y=%d"), point.x, point.y);     MessageBox(buf);*/

    //方法2.字符串格式化:mfc中的字符串 CString     CString str;     str.Format(TEXT("x=%d;y=%d"), point.x, point.y);     MessageBox(str); } //2.键盘 void MyFrame::OnChar(UINT key, UINT, UINT) {     CString str;     str.Format(TEXT("按下了%c键"), key);     MessageBox(str); } //3.绘图 void MyFrame::OnPaint() {     CPaintDC dc(this);     //书写文字     dc.TextOutW(100, 100, TEXT("你好"));     //画椭圆     dc.Ellipse(150, 150, 250, 250); }  

最新回复(0)