一个相当重要,也相当方便的途径。
在这一节中,我们会按照各类在MFC中的层次讲解,由于面向对象语
言的自身特性,父类所具有的特征,其派生出来的子类一般也具有该
特性,因此,掌握各类的派生关系,往往是深刻理解其行为的一个捷
径。同时,我们也应该看到,由于各类与其父类的差别,它们又具有
各式各样的自身的特性,而把握这些特性,又成为进一步理解其独特
特征的必由之路。下面,我们分类简单地讲解一下视类及各视类派生
类。
首先,我们看看处于这些派生类基类位置的CView类在整个系统类体
系中的位置。
图8。17 类CView的继承示意图
由图8。17我们可以看出,类CWnd为类CView的直接基类。从这里,我
们至少可以得到的一个最基本的概念就是,视类的对象具有窗口的一
些基本特性。视类CView是一个用户定义视类的常用基类。一个视类
与一个文档相连接,在文档与用户之间起了一个桥梁的作用。视类,
文档,窗口之间的关系有对象CDocTemplate刻画。当用户新开一个窗
口或将一个窗口进行分割时,程序框架就构造一个与其文档相联系的
视类。一个视只能对应于一个文档,但一个文档可以拥有多个视,因
此,就使一个文档,多个视图的程序可以轻易地实现。在本章的稍后
几节中,读者会发现几个这方面的例程,读者可以看看它们的实现是
多么的轻松。视的主要功能在于显示和修改文档的数据,但它对文档
…………………………………………………………Page 494……………………………………………………………
数据的存储没有什么支持。
一个视类可以直接地接受文档的数据,也可以通过成员函数的调用来
实现。
当一个类的数据发生变化时,该文档所关联的视类通常通过调用函数
CDocument::UpdateAllViews来作出响应。这个函数是维护数据正确
显示的常用手段。
视类CView具有为数不多的成员函数。但这些成员函数中的很多个是
有着重要的意义的。函数OnBeginPrinting初始化打印,
OnEndPrinting结束一个打印任务,而OnEndPrintPreview则更是关于
打印预览操作的一个重要函数,而函数OnPreparePrinting则负责了
对打印以及打印预览的全面支持。
另外,视类中的两个成员函数OnDraw (该函数在屏幕发生变化或因为
焦点的变易需要重绘时调用,没有该函数,就不可能在程序的切换后
保证屏幕的正确显示),OnUpdate则对维护程序的正确显示负有重要
的责任。(当一个文档发生变化时,绝大多数情况下总是希望其各个
视图中的数据能得到同步的正确显示的。)函数UpdateAllViews则是
实现单文档多视图程序不可缺少的手段。(在一个文档的任一视发生
变化时,通过该类实现各视图的正确显示。)
接下来我们看看视类各派生类的继承及成员函数情况。但是,在这
里,我们不再准备对各派生类作详细介绍。但是,我们会尽量简捷地
告诉读者,怎样从系统的庞大帮助数据库中,查到自己所需要的信
息。
(1) 类CEditView
其继承关系如图8。18。注意,该类的直接基类不是CView类,而是类
CCtrlView。
图8。18 类CEditView的继承图解
…………………………………………………………Page 495……………………………………………………………
类CEditView主要被设计来支持类似编辑控件所要实现的功能,通过
打印,查找/替换的支持。它们拥有自己的内存,可以在程序中被任
意正确地使用。我们常见的文本操作,基本上都是由该类支持实现
的。
(2) 类CRichEditView
类CRichEditView的继承层次如图8。19。
该类主要提供Rich文本操作的支持 (Rich文本是既可以为文本,也可
以为图形的一种特殊格式文本。同时,在很多场合下,它们也充当热
字的角色。)
图8。19 类CRichEditView的继承图解
(3) 类CTreeView
类CTreeView的继承层次如图8。20。
图8。20 类CTreeView的继承图解
该类主要提供一些树型控件所实现的功能的支持。它使一种数据的显
示方式可以更富于变化。
(4) 类ListView
类CListView的继承层次如图8。21。
…………………………………………………………Page 496……………………………………………………………
图8。21 类CListView的继承图解
该类与类CTreeView一样,更多的好处在于提供了一种简捷地实现数
据的不同显示的途径。为数据的组织提供多种手段。
(5) 类CScrollView
类CScrollView的继承层次如图8。22。
图8。22 类CScrollView的继承图解
该类也是一个比较重要的类,但它主要提供视图的滚动显示。同时,
需要注意的是,该类的直接基类是类CView,这决定了其动作特点的
特殊性。具体细节请参考系统帮助。
在本节的最后,我们简要地谈一下怎样在系统庞大的帮助文件中快速
准确地找到自己所需要的主题。
Visual C++提供的帮助支持数据库不可谓不大,但往往在这个庞大的
支持面前,我们多少感到一些无从下手。下面,我们结合程序设计时
最可能碰到的一些关于类及函数的查询。
如图8。23,我们以查询有关打印支持操作的类CPrintDialog的情况的
查询。首先,工作区键入CPrintDialog然后按F1,系统搜索其数据库
后给出了帮助信息。单击之即可进入具体的帮助主题了。
…………………………………………………………Page 497……………………………………………………………
图8。23 查询结果显示
第六节 同一文档的多个视
启动Visual C++下的App Wizard 可以生成多文档程序,这只需要在
第一步中选择MDI应用程序类型即可。从生成的MDI程序中,我们可以
发现MDI程序与SDI程序的一个最主要的区别就是主窗口是由基类
CMDIFrameWnd而不象在SDI程序中由CFrameWnd派生出来的。
class CMainFrame : public CMDIFrameWnd
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();
// 。。。
}
在最初的文档模板中 (文档被打开时被激活)只支持主窗口。这可以
由下面的一段初始化代码中看出(摘自CMDIApp。cpp)。
BOOL CMdiApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable; you should remove from the following
…………………………………………………………Page 498……………………………………………………………
// 。。。
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MDITYPE;
RUNTIME_CLASS(CMdiDoc);
RUNTIME_CLASS(CChildFrame); // custom MDI child frame
RUNTIME_CLASS(CMdiView));
AddDocTemplate(pDocTemplate);
// 。。。
return TRUE;
}
每次打开一个新文
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 最新章:第42章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- 路由器基本知识及应用实例(DOC格式)
- 第二章 路由器第一节 路由器发展概述自从1984年问世至今,路由器已经走过了近20年的快速技术发展历程。路由器的应用领域不断扩展、从单一的互通网关逐渐扩展到覆盖广域网、城域网乃至用户接入的各个领域。近年来,路由器早已逐渐脱离单纯用于企业网出口和互联的概念,开始成为运营网络和各种专用业务网络的核心设备
- 最新章:第48章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章