MFC深入浅出 (一)

一、MDI应用程序的构成

图1-2所示的类都是从CObject类派生出来的;所有处理消息的类都是从CCmdTarget类派生的。如果是多文档应用程序,文档模板使用CMultiDocTemplae,主框架窗口从CMdiFarmeWnd派生,它包含工具条、状态栏和文档框架窗口。文档框架窗口从CMdiChildWnd派生,文档框架窗口包含视,视从CView或其派生类派生。

 

对预编译头文件说明如下:

所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。

编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。

因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。

另外,每一个实现文件CPP都包含了如下语句:

#ifdef _DEBUG

#undef THIS_FILE

static char BASED_CODE THIS_FILE[] = __FILE__;

#endif

这是表示,如果生成调试版本,要指示当前文件的名称。__FILE__是一个宏,在编译器编译过程中给它赋值为当前正在编译的文件名称。

 

 

二、Cobject类的分析

CObject为Microsoft基础类库中主要的基类。它不仅用作库类,例如CFile和CObList的根,而且也是自己编写的类的根。CObject类提供了基本的服务,其中包括:

·支持串行化
·运行类信息
·对象诊断输出
·与收集类兼容

注意:CObject类不支持多继承。派生的类仅仅拥有一个CObject基类,并且CObject在等级体系中必须位于最左边。不过,它也允许在多继承分支的右边有其结构及非CObject派生类。
如果在类的执行与声明过程中使用了可选的宏,那么你将发现CObject派生的主要优点。
第一层次的宏,DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC,允许在等级体系中运行时访问类名及位置。这样,将允许依次地进行有意义的诊断转储。
第二层次的宏,DECLARE_SERIAL和IMPLEMENT_SERIAL,包含了第一层次宏的所有功能,并且能够使对象到“档案”有效地串行化。
如果要了解有关通常条件下派生的Microsoft基础类和C++类,以及如何使用CObject类的更多信息,请参阅联机文档“Visual C++程序员指南”中的“CObject类主题”及“串行化(对象永久化)”。
#include <afx.h>

三、CCmdTarget分析

类CCmdTarget是MFC类库中消息映射体系的一个基类。消息映射把命令或消息引导给用户为之编写的响应函数(命令是由菜单项、命令按钮或者加速键产生的消息)。
从CCmdTarget继承来的按键框架类包括:CViewCWinAppCDocumentCWndCFrameWnd。如果想生成一个处理按键消息的类,可以选择其中的一个派生一个子类。很少需要直接从CCmdTarget派生类。
相关的命令目标和OnCmdMsg例程的其它信息,请参阅联机文档“VisualC++程序员指南”中的“命令目标”、“命令路由”和“映射消息”部分。
类CmdTarget包括了处理沙漏形光标显示的成员函数。当某个命令的执行时间比较长时,可以显示沙漏标提示用户命令正在执行。
和消息映射类似,分派映射用于列出OLE自动的IDispatch功能。列出这个接口后,其它的应用(如VB)就能调用这个应用了。有关IDispatch接口的更详细的信息,请参阅“Win32 SDK OLE程序员参考”中的“创建IDPatch接口”和“分派接口与API函数”。
#include <afxwin.h>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值