应用程序框架,这是个有革命性的词,它至少有以下几个意义:
1:具备标准软件所有的基本功能,如文件读取,打印,资料交换,工具栏,状态列等。
2:它从本质来说是一组对象的组合,那么对象间必须有着紧密的配合,肯定也有着某些设计模式之类的东西,这些东西才是人所要的,才是最精华的东西。框架的凝聚性强,组织化强。
3:既然MS可以提供程序框架,那么我们是不是可以模拟它而建立自己的框架呢?比如为汽车软件开发建立一个框架,那么什么是WinApp类呢?又包含什么对象和类呢?其间的关系如何呢?
4:框架的意义在于,一切都是事先定制好的,你只要改写就好了。所以,框架=不变的结构+变化的需求。
5:框架有大小之分,比如自定义的汽车电子软件框架中,显然就必须有诊断模块,那么诊断模块本身也是个小框架。
6:框架=代码自动生成,至于用什么来实现,那就不一定了,你可以使用脚本语言,也可以用C/C++。
当你使用File/Open/Save时,主框架窗口自动通知Document对象,引发Serialization动作,你所需要的只是改写Serialize虚函数。
Windows程序设计的本质是对消息的把握,而MFC改变了Windows管理消息的方法。
既然MFC可以使用宏来实现对Windows消息的包装,那么我们显然也可以使用宏来实现自己的框架。
MFC 类别主要可分为下列数大群组:
■ General Purpose classes - 提供字符串类别、数据处理类别(如数组与串行,集合类),异常情况处理类别、文件类别...等等。如CObject类。
■ Windows API classes - 用来封包Windows API,例如窗口类别、对话框类别、DC 类别...等等。
■ Application framework classes - 组成应用程序骨干者, 即此组类别, 包括
Document/View、消息邦浦、消息映射、消息绕行、动态生成、文件读写等等。
■ high level abstractions - 包括工具栏、状态列、分裂窗口、卷动窗口等等。
■ operation system extensions - 包括OLE、ODBC、DAO、MAPI、WinSock、ISAPI
等等。
MFC 支持的collection classes 有:
要知道,任何32位程序都至少要一个执行线程构成,所以用CWinApp代表整个MFC应用程序。
CCmdTarget这个类是CWnd的父类,它这么重要,因为它可以接收WM_COMMAND消息。可见命令消息的重要性,都为它单独成立了一个类。
文件产生之际,必须动态生成Document/View/Frame三个对象,所以要有所谓的Document Templetate管理之。
Afx是全领域函数,C++不是纯粹的面向对象的语言。
AfxWinInit 被WinMain(由MFC 提供)调用的一个函数,用做MFC GUI
程序初始化的一部份,请看第6章的「AfxWinInit - AFX 内部
初始化动作」一节。如果你写一个MFC console 程序,就得
自行调用此函数(请参考Visual C++ 所附之Tear 范例程序)。
AfxBeginThread 开始一个新的执行线程(请看第14 章,# 756 页)。
AfxEndThread 结束一个旧的执行线程(请看第14 章,# 756 页)。
AfxFormatString1 类似printf 一般地将字符串格式化。
AfxFormatString2 类似printf 一般地将字符串格式化。
AfxMessageBox 类似Windows API 函数MessageBox。
AfxOutputDebugString 将字符串输往除错装置(请参考附录D,# 924 页)。
AfxGetApp 取得application object(CWinApp 衍生对象)的指针。
AfxGetMainWnd 取得程序主窗口的指针。
AfxGetInstance 取得程序的instance handle。(这三个Get系列很有用的)
AfxRegisterClass 以自定的WNDCLASS 注册窗口类别(如果MFC 提供的数个
窗口类别不能满足你的话)。
在Windows编程深化过程中,出现的PASCAL,CALLBACK,WINAPI,APIENTRY现在都表示同样的意义,都是stdcall标准调用之义。
阅读(2398) | 评论(0) | 转发(0) |