MFC消息映射机制

四、消息映射机制

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);
}
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值