深入浅出MFC笔记(4)

总观 Application Framework

MFC 在1.0 版时期的诉求是「一组将SDK API 包装得更好用的类别库」,从2.0 版开始更进一步诉求是一个「Application Framework」,拥有重要的Document-View  架构;
随后又在更新版本上增加了OLE 架构、DAO 架构... 。

1.MFC 类别主要可分为:

■ General Purpose classes -适用于Windows,也适用于DOS

CObject:Dynamic CreationRTTICRuntimeClass)、PersistenceCArchive)、DiagnosticCDumpContext)。

杂项类别CRect CSize CPoint CTime(绝对时间) CTimeSpan(以秒数表现相对时间) CString 

数据处理类别(collection classes :Array List  Map 等等,都内含「加入」或「删除」或「巡访」等成员函数。支持Serialization ,可以单一一进程序代码就写到文件中(或从文件读出)

异常处理类别(exception handling classes):发生在程序执行时期的不正常情况

■ Windows API classes -这些类别的成员函数所对应的各个Windows API 函数。

CWinThread -程序中的一个执行线程。SDK 程序中标准的消息循环已经被封装在此类中

CWinApp -代表应用程序。衍生自CWinThread;任何32 Windows 程序至少由一个执行线程构成。

CWnd -所有窗口,衍生自CCmdTarget;主框窗口、子框窗口、对话框、控制组件、view 视窗对应的C++类别。凡衍生自CWnd之类别才能收到WM_  窗口消息(WM_COMMAND 除外)。

「窗口handle」和「C++对象」结盟:CWnd对象的成员变数m _hWnd,就放着对应的窗口handle

CCmdTarget -衍生自它的类别才能够处理命令消息WM_COMMAND。 

GDI 类别、DC 类别、Menu 类别

 Application framework classes -组成应用程序骨干者

Document/View的观念是希望把资料的本体,和资料的显像分开处理。由于文件产生之际,必须动态生成Document/View/Frame 三种对象,Document Template扮演黏胶的角色,把其胶黏在一块儿。

CSingleDocTemplate一次只支持一种文件类型,CMultiDocTemplate 可同时支持多种文件类型。注意,这和MDI程序或SDI程序无关

CDocument-当你为自己的程序由CDocument 衍生出一个子类别后,应该在其中加上成员变量,以容纳文件资料;并加上成员函数,负责修改文件内容以及读写档。读写文件由虚拟函数Serialize 负责。

CView-此类别负责将文件内容呈现到显示装置上:也许是屏幕,也许是打印机。文件内容的呈现由虚拟函数OnDraw负责。由于这个类别实际上就是你在屏幕上所看到的窗口(外再罩一个外框窗口),所以它也负责使用者输入的第一线服务。

 high level abstractions -视觉性UI 对象属于此类

包括工具栏CToolBar、状态列CStatusBar、对话框列CDialogBar等等。

加强型的View 也属此类,如可卷动的ScrollView、以对话框为基础的CFormView 、小型文字编辑器CEditView、树状结构的CTreeView,支持RTF 文件格式的CRichEditView 等等。

 operation system extensions -包括OLE ODBC DAOMAPI WinSockISAPI等等。

2.Afx全域函数

C++ 并不是纯种的对象导向语言,MFC之中存在有不属于任何类别的全域函数,它在函数名称Afx前缀。

AfxWinInit AfxBeginThread AfxEndThread AfxFormatString1 AfxFormatString2 AfxMessageBox

AfxOutputDebugString AfxGetApp AfxGetMainWnd AfxGetInstance AfxRegisterClass

3.MFC宏(macros):

CObject CRuntimeClass 之中封装了数个所谓的object services,包括「取得执行时期的类别信息」(RTTI)、Serialization (文件读写)、动态产生对象等等。所有衍生自CObject 的类别,都继承这些机能。

DECLARE_IMPLEMENT_的一对宏的前缀:DYNAMIC执行时期类别信息 DYNCREATE动态生成SERIAL对象内容的文件读写OLECREATE动态生成OLE对象的

MFC 的消息映射(Message Mapping)与命令绕行(CommandRouting)两个特性

声明/开始/结束消息映射表数据结构

DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP END_MESSAGE_MAP

增加消息映射表中的项目

ON_COMMAND ON_CONTROL ON_MESSAGE ON_OLECMD ON_UPDATE_COMMAND_UI 

ON_REGISTERED_MESSAGE ON_REGISTERED_THREAD_MESSAGE ON_THREAD_MESSAGE

4.MFC 数据类型(data types):与C++ 语言数据类型之间的对应,定义于WINDEF.H

BOOL 

 Boolean 值(布尔值

LPSTR 

指向一个字符串

BYTE

8-bit  整数,未带正负号

LPCSTR

指向一个常数字符串

WORD 

16-bit 整数,未带正负号

LPTSTR 

指向一个字符串可移植到双字节字集

DWORD 

32-bit 整数,未带正负号

LPCTSTR

指向一个常数字符串可移植到双字节字集

LONG

32-bit 整数,带正负号

LPVOID

指向一个未指定类型的资料

COLORREF

32-bit 数值,代表一个颜色值

LPRESULT 

做为窗口函数或callback  函数的回返值

UINT

一字大小的未带正负号整数

LPARAM       

做为窗口函数或callback函数的一个参数

WPARAM

窗口函数的callback函数的参数(一字)

WNDPROC

指向一个窗口函数

POSITION

MFC collection classes中的元素位置

BSTR

字符指针

指针均为32bit大小

LPCRECT

指向一个不变的RECT 结构

5.把MFC 想象为第四代语言,单单一个类别就帮我们做掉原先要以一大堆APIs 才能完成的事情。

Class Library 可以定义为「一组具备对象导向性质的类别,它们使应用程序的某些功能实现起来容易一些,这些功能包括数值运算与数据结构、绘图、内存管理等等等;这些类别可以一片一片毫无瓜葛地并入应用程序内」。

GUI toolkit 的程序接口是程序导向而非对象导向。而且它的功能大都集中在图形与UI 接口上。

6.PC 世界里出了三套C++ Application Frameworks,并且有愈多愈多的趋势。这三套是Microsoft MFC Microsoft Foundation Classes ),Borland OWL ObjectWindowLibrary),以及IBM VisualAge C++  Open Class Library


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值