【笔记】《深入浅出MFC》第5章 总观Application Framework
凝聚性强、组织化强的类库就是Application Framework。一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务,这就是Application Framework。
Application Framework是一组超级的类库,能够被称为Framework者必须是其中的类性质紧密咬合,互相呼应。
绝大部分类库,往往以一个或两个类,作为其它绝大部分类的基础,MFC也一样。CObject是万类之首,凡派生自CObject者,得以继承数个面向对象重要性质,包括RTTI(运行时类型识别)、Persistence(对象保存)、Dynamic Creation(动态创建)、Diagnostic(错误诊断)。
MFC支持的数据处理类(collection classes)有:

异常处理有关的MFC类有以下11种:

凡派生自CWnd的类才能收到WM_窗口消息(WM_COMMAND除外)。
所谓窗口handle和C++对象结盟,实际上是CWnd对象有一个成员变量m_hWnd,就放着对应窗口handle。所以,只要有CWnd对象或CWnd对象指针,就可以获得其窗口handle。
HWND hWnd = pWnd->m_hWnd;
CCmdTarget是CWnd的父类。派生自它,类才能够处理命令消息WM_COMMAND。这个类是消息映射以及命令消息传递的大部分关键。
Document/View的观念是希望把数据的本体和数据的显示分开处理。由于文件产生之际,必须动态创建Document/View/Frame三种对象,所以又必须由所谓的Document Template管理之。Document Template扮演黏胶的角色,把Document 和View 和其Frame(外框窗口)胶黏在一块儿。
CDocument:当你为自己程序由CDocument派生出一个子类后,应该在其中加上成员变量,以容纳文件数据;并加上成员函数,负责修改文件内容以及读写文件。读写文件由虚函数Serialize负责。
下面是几个常见的Afx全局函数:

CObject和CRuntimeClass中封装了数个所谓的object services,包括“取得运行时的类信息(RTTI)”、Serialization(文件读写)、动态产生对象等等。所有派生自CObject的类,都继承这些机能。
MFC针对这些机能定义了一些宏:

MFC的消息映射与命令传递由以下宏完成:

MFC的大部分数据类型和一般的Win32程序所用的相同,下面是共用的数据类型:

下面是MFC独特的数据类型:

【笔记】《深入浅出MFC》第5章 总观Application Framework的更多相关文章
- 《深入浅出MFC》下载
百度云及其他网盘下载地址:点我 编辑推荐 <深入浅出MFC>内含光盘一片,书中所有原始码与可执行文件尽在其中. 作者简介 侯俊杰,先生不知何许人也,闲静少言,不慕荣利.好读书,求甚解:每有 ...
- 评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>
侯捷的<深入浅出mfc>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了. 而李久进的<mfc深入浅出>,听说的人可能就少得多.原因听说是这本书当时没有怎么宣传,而 ...
- 深入浅出MFC——MFC六大关键技术仿真(二)
1. 仿真MFC目的:以MFC为例,学习application framework的内部运行.MFC六大关键技术: (1)MFC程序的初始化过程 (2)RTTI(Runtime Type Inform ...
- 深入浅出MFC——Document-View深入探讨(五)
1. MFC之所以为Application Framework,最重要的一个特征就是它能够将管理数据的程序代码和负责数据显示的程序代码分离开来,这种能力由MFC的Document/View提供.Doc ...
- DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- 《python基础教程(第二版)》学习笔记 函数(第6章)
<python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params): block return values 记录函数:def f ...
- 《python基础教程(第二版)》学习笔记 字典(第4章)
<python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...
- 《python基础教程(第二版)》学习笔记 字符串(第3章)
<python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...
随机推荐
- hibernate报错 java.lang.StackOverflowError: null
在使用hibernate时,报错 java.lang.StackOverflowError: null 把当前线程的栈打满了 java.lang.StackOverflowError: null at ...
- bam/sam格式说明--转载
在SAM输出的结果中每一行都包括十二项通过Tab分隔,从左到右分别是: 1 序列的名字(Read的名字) 2 概括出一个合适的标记,各个数字分别代表 1 序列是一对序列中的一个 2 比 ...
- gpg: no valid OpenPGP data found. 解决办法
在Ubuntu14.04 server(amd64)上面安装ros,运行命令 wget http://packages.ros.org/ros.key -O - | sudo apt-key add ...
- [原][译][lua][luabridge]一个简单的luabridge与c++例子结合例子
参考:https://eliasdaler.wordpress.com/tag/luabridge/ https://eliasdaler.wordpress.com/2015/08/10/using ...
- Codeforces 847B - Preparing for Merge Sort
847B - Preparing for Merge Sort 思路:前面的排序的最后一个一定大于后面的排序的最后一个.所以判断要不要开始新的排序只要拿当前值和上一个排序最后一个比较就可以了. 代码: ...
- 微信小程序跳到h5,h5在跳回小程序
1.在微信小程序后台: 设置->开发设置->业务域名: 添加业务逻辑域名 2.在html5页面添加如下代码: <! -- html --> < script type=& ...
- WPF 的 数据源属性 和 数据源
(一)数据源(数据对象)属性 :path 或 path的值(path=VM.Property或M.Property),通常具有通知功能(特例除外). (二)path不能孤立而存在,它一定具有所归属的 ...
- English trip -- VC(情景课)5 Around Town
Around Town 城市周围 Talk about the picture 看图说话 sentences Where are you? I'm in the Meten classroom. ...
- Android程序员眼中世界上最遥远的距离
世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离: 世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己: 世界上最真情的相依,是你在try我在catch. ...
- kubectl管理多个k8s集群
#把每个k8s集群的json配置文件放到/root/.kube/目录下,改为不同名字,通过--kubeconfig实现不同集群操作 kubectl --kubeconfig=/root/.kube/m ...