【笔记】《深入浅出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独特的数据类型:

时间: 11-21

【笔记】《深入浅出MFC》第5章 总观Application Framework的相关文章

学习笔记之深入浅出MFC 第8章 C++重要性质----虚拟函数与多态(Polymorphism)

1.虚拟函数的由来 上面我们曾经提过一个例子: CShape shapes[5]; . . . //令5个shapes各为矩形.正方形.椭圆形.圆形.三角形 for ( int i = 0;  i<5;  i++) { shapes[i].display(); } 在上一节中我们说这种一般化的操作无法完成.你还记得为什么吗?是这样的,上面一节中讲到,由于每一个子类图形的绘制不同,所以display()各不相同,所以无法提升到基类中去.那么用基类定义的shapes[]数组,当然也就没有displa

学习笔记之深入浅出MFC 第9章 仿真MFC之二

RTTI(执行期类型识别) 在前面章节中我们介绍过Visual C++4.0支持RTTI,重点不外乎是: 1.编译时需选用/GR(/GR的意思是enable C++ RTTI) 2.包含typeinfo.h 3.使用新的typeid运算符. 其实,MFC在编译器支持RTTI之前,就有了这项能力.我们现在要以相同的手法,在Console程序中仿真出来.我希望我的类库具备IsKindOf的能力,能在执行期侦测某个对象是否"属于某种类",并传回TRUE或FALSE.以前一章的Shape为例,

学习笔记之深入浅出MFC 第9章 仿真MFC 之一

在文章开始是我们的观点就强调过了,要想用好一个工具,就必须深入了解这个工具的工作原理.而仿真,正是最好的方法. 如何仿真呢?我们在console程序中仿真MFC,这样可以把程序结构的负荷降到最低.作者在仿真中的原则是:简化再简化,简化到不能再简化.请注意,以下所有程序的类层次结构.类名称.变量名称.结构名称.函数名称.函数内容,都以MFC为仿真对象,具体而微. 在档案的安排上,作者把仿真MFC的类集中在MFC.H和MFC.CPP中,把自己派生的类集中在MY.H和MY.CPP中.对于自定义的类,我

《深入浅出MFC》第九章 消息映射与命令传递

Windows程序的本质是借着消息来维持脉动.每个消息都有一个代码,并以WM_开头的常量表示.来自菜单和工具栏者,都以WM_COMMAND表示,参数wParam记录消息的发出者. MFC的消息分为三大类,命令消息(WM_COMMAND),凡派生自CCmdTarget的类都有资格接收命令消息.除WM_COMMAND外,所有以WM_开头的都属于标准消息,派生自CWnd的类可接收此类消息.由控件产生的消息,为的是向父窗口传递某种情况,这种消息是以WM_COMMAND形式呈现. MFC通过三个宏来进行消

【读书笔记】设计模式第6章:行为型模式2

本文主要分析了中介者模式.观察者模式.备忘录模式.访问者模式.状态模式.解释器模式,介绍它们的定义.优缺点.使用场景,以及实例代码.为了深刻地理解设计模式,最重要的还是动手编写代码. 我参照书中的例程重新构想了一些更加生动.易于理解的例子,希望大家喜欢. 代码可以通过以下链接进行浏览: http://git.oschina.net/caipeichao/java-design-pattern 这些代码都经过编译运行,保证没有错误. 中介者模式 定义 也叫调停者模式 用一个中介对象来封装一系列同事

[读书笔记]算法(Sedgewick著)·第二章.初级排序算法

本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. 1 public static void sort(Comparable a[]){ 2 int N = a.length; 3 for(int i = 0; i < N; i ++){ 4 int min = i; //最小元素索引 5 for(int j = i + 1; j < N; j++){ 6 if(

读书笔记:计算机网络第7章:阻塞控制

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 概述 课程位置 关于传输层和网络层的上半部分 话题 阻塞就类似于显示生活中的堵车 阻塞CONGEST

【读书笔记】设计模式第五章:行为型模式

本文主要分析了模板方法模式.命令模式.责任链模式.策略模式.迭代器模式,介绍它们的定义.优缺点.使用场景,以及实例代码.为了深刻地理解设计模式,最重要的还是动手编写代码. 我参照书中的例程重新构想了一些更加生动.易于理解的例子,希望大家喜欢. 代码可以通过以下链接进行浏览: http://git.oschina.net/caipeichao/java-design-pattern 这些代码都经过编译运行,保证没有错误. 模板方法 定义 定义一个操作中的算法框架,而将一些步骤延迟到子类中 角色:抽

[读书笔记]算法(Sedgewick著)·第一章(1)

到家放松之后就开始学习算法了,手里拿的是拿的是一本Robert Sedgewick的橙皮书<算法(第四版)>的.这本书与导论那本书的不同之处在于轻数学思想.重实现,也就是说这是一本很不错的基础编程书.拿来做书中的练习还是蛮不错的,封面说有50种算法哦.思维导图如下,就且学且更新吧. 1.基本编程模型 第一章开始讲述用程序实现算法的优点:程序是对算法精确.优雅和完全的描述:可以通过运行程序来学习算法的各种性质:可以在应用程序中直接使用这些算法.还有这种学习算法的缺点缺点:分离思想和实现细节的困难