当前位置: 首页 > news >正文

志愿者协会网站建设中国建设银行官网站e路护航

志愿者协会网站建设,中国建设银行官网站e路护航,中国建设行业网,asp.net网站sql权限设置本专栏上两篇文章分别介绍了【MFC】05.MFC第一大机制:程序启动机制和【MFC】06.MFC第二大机制:窗口创建机制,这篇文章来为大家介绍MFC的第三大机制:消息映射 typfd要实现消息映射,必须满足的三个条件: 类必…

本专栏上两篇文章分别介绍了【MFC】05.MFC第一大机制:程序启动机制和【MFC】06.MFC第二大机制:窗口创建机制,这篇文章来为大家介绍MFC的第三大机制:消息映射

  • typfd要实现消息映射,必须满足的三个条件:

    类必须继承于CmdTargert

    类必须声明重定义 DECLARE_MESSAGE_MAP

    类外必须实现DEGIN_MESSINGE_MAP()

    END_MESSAGE_MAP()

    自己的窗口类{LERESULT onCreate(WPARAM wParam,LPARAM lParam){AfxMessageBox("WM_CREATE");}//定义宏:DECLARE_MESSAGE_MAP()
    }//类外实现消息映射:
    BEGIN_MESSAGE_MAP(cMyFrameWnd,CFrameWnd)ON_MESSAGE(WM_CREATE,onCreate);
    END_MESSAGE_MAP()
    
  • 在Win32程序中封装消息:

    我们定义一张映射表,当进入WndProc的时候,通过查找这张表的映射关系,来执行对应的函数:

    typedef struct MESSAGE_ENTRY{int message;int (*pFun)(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
    }
    struct MESSAGE_ENTRY MessageMap[]{映射容器:WM_PAINT,函数地址
    }
    

MFC的消息映射机制:

  • 宏展开:
    DECLARE_MESSAGE_MAP(){//静态函数static const AFX_MSGMAP* PASCAL GetThisMessageMap();//虚函数virtual const AFX_MSGMAP* GetMessageMap() const;
    }实现宏展开:
    DECLARE_MESSAGE_MAP(){//静态函数static const AFX_MSGMAP* PASCAL GetThisMessageMap();//虚函数virtual const AFX_MSGMAP* GetMessageMap() const;
    }BEGIN_MESSAGE_MAP(CMFCApplication1App, CWinApp){//这里是实现虚函数,const AFX_MSGMAP* theClass::GetMessageMap() const { return GetThisMessageMap();} const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \{ \typedef theClass ThisClass;typedef baseClass TheBaseClass;static const AFX_MSGMAP_ENTRY _messageEntries[] = {{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }}; static const AFX_MSGMAP messageMap = { &TheBaseClass::GetThisMessageMap,//我们的弗雷德静态函数地址&_messageEntries[0] };//本类消息结构体的数组首地址return &messageMap;}			
    }
    

我们来看看struct AFXmMSGMAP_ENTRY结构体:

struct AFX_MSGMAP_ENTRY
{UINT nMessage;   //消息IDUINT nCode;      //win32通知码 UINT nID;        //命令ID WM_COMMAND 菜单 按钮 快捷键 加速键  1000UINT nLastID;    //最后ID                                       1004UINT_PTR nSig;   //处理消息的类型AFX_PMSG pfn;    //我们的处理消息的函数地址
};

消息回调:

LRESULT CALLBACK AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);{pWnd->WindowProc(nMsg, wParam, lParam){OnWndMsg(message, wParam, lParam, &lResult){//函数签名 里面有函数指针union MessageMapFunctions mmf;//返回链表头节点const AFX_MSGMAP* pMessageMap; pMessageMap = this->GetMessageMap();const AFX_MSGMAP_ENTRY* lpEntry;for (/* pMessageMap already init'ed */; pMessageMap->pfnGetBaseMap != NULL;        //判断节点等不等于空pMessageMap = (*pMessageMap->pfnGetBaseMap)()//找下一个节点){lpEntry = AfxFindMessageEntry(pMessageMap->lpEntries,message, 0, 0)) != NULL)    //消息函数的地址mmf.pfn = lpEntry->pfn;switch (lpEntry->nSig){lResult = (this->*mmf.pfn_l_w_l)(wParam, lParam);}}} }}
}
http://www.yayakq.cn/news/331285/

相关文章:

  • 企业网站设计开题报告企业所得税怎么征收2021
  • 安阳市建设安全监督站网站小鱼儿企业网站管理系统
  • 培训网站有哪些最好看免费观看高清大全大江大河
  • 国际物流东莞网站建设太原零元网站建设
  • 建网站公司营销型网站建设网页设计师培训方法
  • 自助建站系统凡科近期国际军事形势
  • 建设工程消防备案查询网站高端酒店网站模板免费下载
  • 长春网站建设企业界首做网站
  • 海口建设厅网站东莞东城国际酒店
  • 外贸网站建设便宜硬件开发工具有哪些
  • 免费小说网站怎么做免费制作微信小程序平台
  • 没有网站可以做百度推广吗wordpress 清空浏览量
  • 网站建设办法家装o2o平台有哪些
  • 一个网站的主题和设计风格惠州中小企业网站制作
  • 双阳区住房和城乡建设局网站凡科可以建设多个网站吗
  • 邮箱账号做网站用户名好不好昨天正常的网站突然显示建设中
  • mt4网站建设天津网站建设推广服务
  • 做网站怎么加视频网站设计为什么要域名
  • 六安市 网站集约化建设个人备案网站描述
  • 京东商城网站风格企业营销策划论文
  • 江阴市网站建设网站开发信息文档
  • 优化一个网站WordPress禁用自适应
  • 厦门做点击付费网站杭州建设网页
  • 泉州有哪些做网站的东莞哪家网站营销公司好
  • 电子线路板东莞网站建设wordpress基于
  • 支付宝手机网站支付进销存软件排行榜前十名
  • 营销网站建设都是专业技术人员做网站文案用哪个软件
  • 网站开发先前台和后台公益网站建设的意义
  • 湖北洪湖市建设局网站简单学生的网页代码
  • 带数据的网站简单 网站设计