MFC九阴真经
对MFC内部机制和开发技术的学习
尚书左仆射
我喜欢按照不按套路出牌的套路出牌。
展开
-
MFC命令传递的内部流程
我们在《MFC消息流动的内部实现》中已经看到,当消息为命令消息(WM_COMMAND)时,在CWnd::OnWndMsg中将交由OnCommand虚函数来处理。该处的OnCommand函数不一定是CWnd:: OnCommand,具体情况要视this指针所指对象而定。在MFC中以下数个类都改写了OnCommand虚函数:class CWnd : public CCmdTargetclass原创 2016-08-01 14:33:57 · 2475 阅读 · 0 评论 -
MFC消息流动的内部实现
消息的一生神秘而漫长,期间曲折多为人所不知。今天就让我们一起“撩”一下这位高冷的神秘妹纸吧。事实上,MFC中利用hook技术,把看似无关的操作关联了起来。所谓hook(钩子)是Windows中一种高级的编程技术,它可以保证,在特定情况发生的时候就转去执行我们所指定的操作(是一种霸道机关术)。MFC的hook发生在CWnd派生类对象的产生之际。在WINCORE.CPP中我们可以看到如下的代码原创 2016-07-31 22:18:53 · 2320 阅读 · 0 评论 -
MFC消息映射机制实现
Windows程序的本质是依靠消息来维持运行的。每一个消息都有一个代码,并以WM_开头的常量表示。MFC把消息分为三大类:1.命令消息(WM_COMMAND):命令消息意味着“使用者命令程序做某些操作”。凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮,并且都以WM_COMMAND呈现。什么样的类有资格接受命令消息?凡派生自CCmdTarget的类皆有资格。从c原创 2016-07-23 16:49:10 · 1368 阅读 · 0 评论 -
MFC类别型录网之对象动态创建
要实现动态生成的功能,其实利用前面建立的“类别型录”网也已经很接近了。再看一下我们依旧要用的数据结构CRuntimeClass的定义:struct CRuntimeClass{// Attributes LPCSTR m_lpszClassName; int m_nObjectSize; UINT m_wSchema; // schema number of the loaded c原创 2016-07-22 16:44:14 · 1127 阅读 · 0 评论 -
MFC类别型录网之执行期类型识别
我们知道MFC具有运行时类型识别(RTTI)的功能,那它究竟是怎么实现的呢?在MFC的内部,它通过一个叫CRuntimeClass的数据结构以及几个特殊的宏操作来构建一个“类别型录”网,通过在运行时查询该网上的信息来判断某个对象的所属类型。CRuntimeClass该类定义于AFX.H中,内容如下:struct CRuntimeClass{// Attributes LPCS原创 2016-07-22 14:26:10 · 1042 阅读 · 0 评论 -
MFC中的Document-View结构
MFC之所以为Application Framework,最重要的一个特征就是它能够将管理数据的程序代码和负责显示数据的程序代码分离开来,而这种能力有Document/View提供。想要实现数据管理和显示的分离,需要搞清楚一些几个问题:1. 程序的哪个部分持有数据2. 程序的哪个部分负责更新数据3. 如何以多种方式显示数据4. 如何让数据的更改有一致性5. 如何实原创 2016-07-21 12:08:36 · 4629 阅读 · 0 评论 -
调皮的MFC(2)
上回书说到,WinMain和窗口处理函数分别被相应的类操作和宏操作所取代。这次我们就来看一下,取代之后的MFC程序是如何运行的吧。先把类继承图贴出来,随时可以回顾一下。主cpp文件中的第一个操作语句:// The one and only CMyWinApp objectCMyWinApp theApp;1.生成一个对象自然是要调用构造函数的,但是不仅要调用自身的构原创 2016-07-20 15:23:19 · 2255 阅读 · 1 评论 -
调皮的MFC(1)
新建一个MFC工程,集成环境会先帮我们生成一个框架。框架中用到的最重要的基础类层次结构如下所示:其中在虚矩形框中的类是我们自己继承的类,实矩形框中的类是MFC中自带的类(取自深入浅出MFC)。下面对MFC中自带的类做一些大致的说明:CObject类MFC的CObject类为程序员提供了对象诊断、运行时类型标识、序列化和动态生成等功能。(1)对象诊断:利用成员函数原创 2016-07-19 20:22:20 · 1365 阅读 · 0 评论 -
win32程序概况
学习MFC之前朋友建议我先学Windows编程,的确还是有道理的,毕竟MFC把自己“裹得太严实”,如果有win32的编程经验势必可以更好地掌握MFC。所以喽,文中和大家一起分享我学习win32部分后的总结。Windows程序和操作系统之间的爱恨纠葛请看下图:1中表示的是系统消息队列。当操作系统启动并初始化时,线程Raw Input Thread(RIT)就会启动,并创系统硬件输原创 2016-07-16 22:00:05 · 1703 阅读 · 0 评论