MFC消息映射机制

昨天晚上和舍友聊天,彼此聊着自己的前女友,聊到最后,我们同时对彼此说了一句,你真贱。。。

----  网易云热评

一、消息映射机制的使用

不重写WindowProc,但也能处理消息

1、类必须派生自CCmdTarget,直接或间接都可以

CObject---CCmdTarget--CWnd--CFrameWnd--CMyFrameWnd--pFrame

CObject--CCmdTarget--CWinThread--CWinApp--CMyWinApp--theApp

2、类内必须添加声明宏 DECLARE_MESSAGE_MAP()

3、类外必须添加实现宏

BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)

END_MESSAGE_MAP()

4、宏展开各部分的作用

GetThisMessageMap() - 静态函数

定义一个静态数组 _messageEntries[]-保存了消息ID和处理消息函数

 定义一个静态变量 messageMap - 获取父类静态变量地址(连接链表),获取相应的静态数组首地址

返回静态变量的地址

GetMessageMap - 成员虚函数

返回 静态函数(GetThisMessageMap)返回的值(链表头节点)

 

二、框架代码编写

#include <afxwin.h>//创建自己的框架类class CMyFrameWnd:public CFrameWnd  //CCmdTarget是CFramWnd的子类{       DECLARE_MESSAGE_MAP()};BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)END_MESSAGE_MAP()//创建自己的应用程序类class CMywinApp:public CWinApp{public:       virtual BOOL InitInstance();};CMywinApp theApp;BOOL CMywinApp::InitInstance(){       CMyFrameWnd* pFrame = new CMyFrameWnd;       pFrame->Create(NULL, "aiyou");       m_pMainWnd = pFrame;       pFrame->ShowWindow(SW_SHOW);       pFrame->UpdateData();       return TRUE;}

 

三、处理创建窗口函数

1、在begin和end之间添加一个宏ON_MESSAGE(WM_CREATE,aiyou),参数是要处理窗口的ID,用哪个函数树立

2、类里面声明函数

class CMyFrameWnd:public CFrameWnd  //CCmdTarget是CFramWnd的子类{       DECLARE_MESSAGE_MAP()public:       LRESULT aiyou(WPARAM wParam,LPARAM lParam);};

3、实现函数,也可以在上面的类里面实现

LRESULT CMyFrameWnd::aiyou(WPARAM wParam, LPARAM lParam) {       AfxMessageBox("WM_CREAT消息被处理");       return 0;}

 

四、处理画图函数

1、添加宏

ON_MESSAGE(WM_PAINT, bucuo)

2、添加声明函数

LRESULT bucuo(WPARAM wParam, LPARAM lParam);

3、实现函数

LRESULT CMyFrameWnd::bucuo(WPARAM wParam, LPARAM lParam) {       PAINTSTRUCT ps = { 0 };       HDC hdc = ::BeginPaint(m_hWnd, &ps);       ::TextOut(hdc, 100, 100, "hello", 5);       ::EndPaint(m_hWnd, &ps);       return 0;}

4、运行效果

 

欢迎关注公众号:顺便编点程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值