VS2010/MFC程序编写新手入门之五(MFC信息投射体制

摘要: 上一讲鸡啄米为大伙儿简易剖析了MFC运用程序架构,这一讲是有关MFC信息投射体制的內容。 前边早已说过,Windows运用程序是信息驱动器的。在MFC手机软件开发设计中,页面实际操作...

  上一讲鸡啄米为大伙儿简易剖析了MFC运用程序架构,这一讲是有关MFC信息投射体制的內容。

  前边早已说过,Windows运用程序是信息驱动器的。在MFC手机软件开发设计中,页面实际操作或是进程中间通讯都是常常采用信息,根据对信息的解决完成相对的实际操作。较为典型性的全过程是,客户实际操作对话框,随后有信息造成,赠给对话框的信息解决涵数解决,对客户的实际操作作出响应。

  什么叫信息

  对话框信息一般由三个一部分构成:1.一个无标记整数金额,是信息值;(2)信息附加的WPARAM种类的主要参数;(3)信息附加的LPARAM种类的主要参数。实际上大家一般常说的信息是范畴上的信息值,也便是一个无标记整数金额,常常被界定为宏。

  什么叫信息投射体制

  MFC应用一种信息投射体制来解决信息,在运用程序架构中的主要表现便是一个信息与信息解决涵数逐一相匹配的信息投射表,及其信息解决涵数的申明和完成等编码。当对话框接受到信息时,会到信息投射表格中搜索该信息相匹配的信息解决涵数,随后由信息解决涵数开展相对的解决。SDK程序编写时要要在对话框全过程中逐一分辨信息值开展相对的解决,对比之中MFC的信息投射体制要便捷功能强大的多。

  Windows信息归类

  先讲讲Windows信息的归类。Windows信息分成系统软件信息和客户自定信息。Windows系统软件信息有三种:

  1.规范Windows信息。除WM_COMMAND外以WM_开始的信息是规范信息。比如,WM_CREATE、WM_CLOSE。

  2.指令信息。信息名叫WM_COMMAND,信息中附加了标志符ID来区别是来源于哪一个莱单、专用工具栏按键或加快键的信息。

  3.通告信息。通告信息一般由目录框等子对话框推送给父对话框,信息名也是WM_COMMAND,在其中附加了控制通告码来区别控制。

 CWnd的派生类都可以以接受到规范Windows信息、通告信息和指令信息。指令信息还能够由文本文档类等接受。

  客户自定信息是具体上便是客户界定一个宏做为信息,此宏的值应当超过相当于WM_USER,随后此宏便可以跟系统软件信息一样应用,对话框类中能够界定它的解决涵数。

  信息投射表

  除开一些沒有基类的类或CObject的立即派生类外,别的的类都可以以全自动转化成信息投射表。下边的解读都之前面例程HelloWorld的CMainFrame为例子。信息投射表以下:

C++编码 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)    ON_WM_CREATE()    ON_COMMAND(ID_VIEW_CUSTOMIZE,  CMainFrame::OnViewCustomize)    ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR,  CMainFrame::OnToolbarCreateNew)    ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7,  CMainFrame::OnApplicationLook)    ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7,  CMainFrame::OnUpdateApplicationLook)    ON_WM_SETTINGCHANGE()   END_MESSAGE_MAP() 

 在BEGIN_MESSAG_MAP和END_MESSAGE_MAP中间的內容变成信息投射通道项。信息投射除开在CMainFrame的完成文档中加上信息投射表外,在类的界定文档MainFrm.h中还会继续加上一个宏启用:

  DECLARE_MESSAGE_MAP()

  一般这一宏启用写在类界定的末尾处。

VS2010/MFC编程入门之五(MFC消息映射机制概述)

  加上信息解决涵数

  怎样加上信息解决涵数呢?无论是全自动還是手动式加上都是有三个流程:

  1.在类界定里加入信息解决涵数的涵数申明,留意要以afx_msg打头。比如MainFrm.h中WM_CREATE的信息解决涵数的涵数申明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。

  2.在类的信息投射表格中加上该信息的信息投射通道项。比如WM_CREATE的信息投射通道项:ON_WM_CREATE()。

  3.在类完成中加上信息解决涵数的涵数完成。比如,MainFrm.cpp中WM_CREATE的信息解决涵数的完成:

  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
   ......
 }

  根据之上三个流程之后,WM_CREATE等信息便可以在对话框类中被信息解决涵数解决了。

  各种各样Windows信息的信息解决涵数

  规范Windows信息的信息解决涵数都和WM_CREATE信息相近。

  指令信息的信息投射通道项方式如:ON_COMMAND(ID_VIEW_CUSTOMIZE, CMainFrame::OnViewCustomize),信息为ID_VIEW_CUSTOMIZE,信息解决涵数为OnViewCustomize。

  假如要想应用某一解决涵数大批量解决一些指令信息,则能够像CMainFrame信息投射表格中的ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, CMainFrame::OnApplicationLook)一样加上信息投射通道项,那样值在ID_VIEW_APPLOOK_WIN_2000到ID_VIEW_APPLOOK_WINDOWS_7中间的莱单项等的指令信息都由CMainFrame的OnApplicationLook涵数解决。涵数原形为afx_msg void OnApplicationLook(UINT id);,主要参数id为客户实际操作的莱单项等的ID。

  在实际操作目录框等控制时通常会给父对话框推送WM_NOTIFY通告信息。WM_NOTIFY信息的wParam主要参数为推送通告信息的控制的ID,lParam主要参数偏向一个构造体,将会是NMHDR构造体,也将会是第一个原素为NMHDR构造体自变量的别的构造体。NMHDR构造体的界定以下(仅作掌握):

 Typedef sturct tagNMHDR{
  HWND hwndFrom;
  UINT idFrom;
  UINT code;
  } NMHDR;

 hwndFrom为推送通告信息控制的句柄,idFrom为控制ID,code为要解决的通告信息的通告码,比如NM_CLICK。

 通告信息的信息投射通道项方式如:

 ON_NOTIFY(wNotifyCode,id,memberFxn)

 wNotifyCode为要解决的通告信息通告码,比如:NM_CLICK。id为控制标志ID。MemberFxn因此信息的解决涵数。

 通告信息的解决涵数的原形为:

 afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result);

 假如必须应用客户自定信息,最先要界定信息宏,如:#define WM_UPDATE_WND (WM_USER+1),再到信息投射表格中加上信息投射通道项:ON_MESSAGE(WM_UPDATE_WND, CMainFrame::OnUpdateWnd),随后在MainFrm.h中加上信息解决涵数的涵数申明:afx_msg LRESULT OnUpdateWnd(WPARAM wParam, LPARAM lParam);,最终在MainFrm.cpp中完成此涵数。

  鸡啄米这节对MFC信息投射体制仅仅干了较为简易的解读,让大伙儿对它有一定的了解,程序编写新手入门者无须强求彻底把握。在之后的实例教程时会常常涉及到到信息的应用,大伙儿会慢慢了解MFC的信息投射体制。

 

VS2010/MFC程序编写新手入门之四(MFC运用程序架构剖析) (:26)

VS2010/MFC程序编写新手入门之三(VS2010运用程序工程项目汉语件的构成构造) (:57)

VS2010/MFC程序编写新手入门之二(运用MFC指导转化成单文本文档运用程序架构) (:16)

VS2010/MFC程序编写新手入门之一(VS2010与MSDN安裝全过程详解) (:2)

VS2010/MFC程序编写新手入门以前言 (:54)

微软公司TTS视频语音模块程序编写新手入门 (:8)

程序编写新手入门工作经验经验教训共享 (:28)

鸡啄米:C++程序编写新手入门系列产品之文件目录和小结 (:7)

鸡啄米:C++程序编写新手入门系列产品之五十(出现异常解决) (:7)

鸡啄米:C++程序编写新手入门系列产品之四十九(多态性:纯虚涵数和抽象性类) (:11)


1楼. 元元blog 2012/3/21 10:09:40 回应该留言板留言 2楼. 婚纱影楼互联网营销推广 回来看一下学习培训了啊 2012/3/22 9:38:34 回应该留言板留言 3楼. xiee 学习培训了! 2012/8/23 17:14:25 回应该留言板留言 4楼. 千池 再次学习培训,尽管有一大堆不明白。 2013/1/22 14:47:37 回应该留言板留言 5楼. linsion 自定信息,哪个#define 写在哪儿个文档里,信息投射表也是哪一个 2013/3/2 21:09:38 回应该留言板留言 6楼. CodingLife 2013/3/4 18:16:41 回应该留言板留言 7楼. 凉水君 我觉得问一下时尚博主怎样拷贝你的编码呢?我拷贝完以后无法黏贴。。 2013/3/20 13:48:35 回应该留言板留言 8楼. 青青 不明白,小编这一节,并不能够讲个简易的事例,例如开启关掉一幅照片,应当就较为好了解了,但是還是学习培训了很多物品,只不过是许多了解不上 。 2014/6/10 11:28:04 回应该留言板留言 9楼. 米 觉得MFC写的较为难。大半年前刚开始时断时续学C++,由于想干一个上位机,由于只学过C,理所应当地就用C++。那时候原以为C++,应当和C很像,想不到比例新学C#或是VB更难。C++的书那时候看了,立即就刚开始编,编的全过程对过程、控制等彻底不明白。都没有觉得到C++的具体实际意义,彻底是C的构思写完后程序。如今准备再次学习培训。 2015/5/12 9:42:01 回应该留言板留言 10楼. 躺着的懒虫 看的是溪山雾罩。这儿的物品基本啥也不明白。只有是有一个基本印像。可是这一印像也很较稀。期待看了后边的实际操作以后会出现点了解吧。 2015/7/3 17:43:35 回应该留言板留言 11楼. 某某某某网民 ^_^ 确实十分谢谢小编共享 2016/9/2 10:34:09 回应该留言板留言 12楼. buaajun 发了当代码这一物品真得狠下心来渐渐地科学研究。以前总感觉自身不明白就匆匆忽略。今日耐着脾气细心看过一下,发觉实际上大部分分還是至少能了解的。感谢小编的珍贵材料。 2016/12/8 15:43:38 回应该留言板留言 13楼. 夏生 为创作者关注,让新手入门学习培训的一次可以看懂比程序编写自身必须难,但我觉得一次明白了3分之1上下,看孙鑫教师的懂的还不上3份之1,感谢。 2019/10/10 19:31:06 回应该留言板留言

网页链接(选填)

认证(*)

文章正文(*)(留言板留言最多篇幅:1000)

记牢我,下一次回应时无需再次键入本人信息内容



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:手机网页模板