MFC骨干程序

上一篇我们谈到了一个MFC程序的生死因果过程,本片简要分析MFC程序骨干内容。

精通MFC程序设计的第一要务是熟记各类的层次结构,并清楚的了解其中几个常用的类,这对于MFC程序开发者来说将大有裨益,至于MFC的程序结构,本处不再给出,可参见MSDN的Hierarchy Chart。

支撑应用程序的Document/View

CDocument:

在MFC中,可以把Document简单想做是“数据”,也就是说,MFC的CDocument简单地说就是负责处理数据的类。CDucument可以内嵌其他对象,比如链表、数组等等。

CView:

CDocument的另一价值在于它搭配了另一个重要的类:CView。可以这样认为,不论什么类型,数据总是有体有面,实际的数据数值就是体,显示在屏幕上的画面就是面,“数值的处理”应该使用字节、整数、浮点数、链表、数组等数据结构,而“数值的表现”应该使用绘图工具,如坐标系统、笔刷颜色、点线圆弧、字形等。CView就是为了数据的表现而设计的。处理负责显示,View还负责程序与使用者之间的交谈接口,使用者对数据的编辑、修改都需要仰赖窗口上的鼠标与键盘操作才得以完成,这些消息都将由View接收后再通知Document。

Document/View:

Document/View的价值在于,这些MFC类已经把一个应用程序所需的“数据处理与显示”的函数空壳都设计好了,这些函数都是虚函数,所以你也可以在派生类中改写他们。有关文件读写的操作在CDocument的Serialize函数中进行,有关画面的显示操作在CView的OnDraw或OnPaint函数中进行。当我们为自己派生出两个类CMyDoc和CMyView时,我只要把全副心思花在CMyDoc:Serialize和CMyView::OnDraw身上,其他事整个程序会自己做好,这里所说的自己做好包括:

  1. 如果按下【File/Open】,Application FrameWork 会激活对话框,让你指定文件名,然后自动调用CMyDoc::Serialize读文件。Application FrameWork还会调用CMyView::OnDraw,把数据显示出来。
  2. 如果屏幕改变,产生了WM_PAINT,FrameWork会自动调用你的CMyView::OnDraw,传一个Display DC,让你重新绘制窗口内容。
  3. 如果按下【File/print...】,Framework会自动调用你的CMyView::OnDraw,这次传进去的是个Print DC,因此绘图操作的输出对象就成了打印机。
Application Framework使我们的程序写作犹如做填空题,Visual C++的软件开发工具则使我们的程序写作犹如做选择题,我们先做选择题,再在骨干程序中做填充题。

一个标准的MFC MDI程序使用那些MFC类?


Document Template
View本身虽然是一个窗口,其外围却必须再封装一个外框窗口作为舞台,这样的切割其实是为了让View可以非常独立地放置于“MDI Document Frame”或“SDI Document Frame”或“OLE Document Frame”等各种应用之中。也可以说,Document Frame窗口是View窗口的一个容器。数据的内容、数据的表象,以及“容纳数据表象之外框窗口”三者是一体的,换言之,程序没打开一份文件(数据),就应该产生三分对象:
  • 一份Document对象
  • 一份View对象
  • 一份CMDIChildWnd对象(作为外框窗口)
这三份对象由Document Template对象来管理,而让这三分对象产生关系的关键在于CMultiDocTemplate。Document Template接受了三种类的CRuntimeClass指针,于是每当使用者打开一份文件,Document Template就能根据“类别型录网”动态创建出三个对象。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值