第3章文档和视图.ppt

第3章文档和视图.ppt

第3章 文档和视图 ;引言;3.1 文档与视图结构;3.1.1 文档与视图结构概述;SDI应用程序的5个基类之间的关系模型如图3.1所示。 图3.1 SDI的基本类结构布局; 图3.2 MDI的基本类结构布局; 视图在文档和用户之间起中介作用,它只负责实现和修改文档数据,但不负责存储。 一个视图是一个没有边框的窗口,它位于主框架窗口区的客户区。视图是文档对外显示的窗口,但是它不能完全独立,必须依存在一个框架窗口内。 每一个文档可以有多个视图,但每个视图只能对应于一个确定的文档。 视图是文档的不同表现形式。 ;3.1.2 文档与视图间的相互作用;3.1.3 多文档应用程序;1.多文档应用程序 【例3.1】编写一个多文档应用程序MyMdi,程序运行后在客户区窗口显示信息“这是hello world的多文档程序!”。;程序的实现过程如下: (1)创建应用程序框架 (2)添加代码 在MyMdi应用程序的CMyMdiView类的OnDraw函数中添加显示文本的代码 pDC-TextOut(50,50, _T(欢迎学习建立多文档程序!)); TextOut函数用于在指定的位置输出字符串。; 2.文档模板 在文档-视图结构应用程序中,数据以文档类的对象形式存在。 MFC提供了抽象基类CDocTemplate来实现文档模板的功能,应用程序不能直接使用,但可以把文档模板定义为CDocTemplate的派生类,在应用程序中,必须为每种类型的文档建立一个文档模板。 ;(1)文档模板的构成 文档模板定义了三个类之间的关系。 ① 文档类 应用程序从CDocument类派生此类,用于完成文档的新建、打开和保存等工作。 ② 视图类 应用程序从CView、CScrollView、CEditView类派生而来,用于显示文档数据。 ③ 含有该视图文档的框架窗口类 单文档应用程序从CFrameWnd类派生此类,多文档应用程序从CMDIChildWnd类派生而来。如果应用程序不需要定制框架窗口,则也可以直接使用CFrameWnd类和CMDIChildWnd类。; MFC除了提供了CDocTemplate抽象基类之外,还提供了CDocTemplate的两个派生类:CSingleDocTemplate和CMultiDocTemplate。 CSingleDocTemplate类定义了一个实现单文档界面的文档模板。SDI应用程序使用主框架窗口来显示一个文档,每次只能打开一个文档。 CMultiDocTemplate类定义了一个实现多文档界面的文档模板。MDI应用程序用主框架窗口作为工作空间,在其中可以打开单个或多个文档框架窗口。在每个文档窗口中显示一个文档。; (2)文档模板的创建 在初始化应用程序时,必须首先注册文档模板,以便程序利用这个模板来完成主框架窗口、视图、文档对象的创建和资源的装入。 在SDI或MDI应用程序中,要注册文档模板,需通过new运算符调用文档模板类的构造函数生成一个CSingleDocTemplate或CMultiDocTemplate类对象,并调用函数AddDocTemplate注册该文档模板对象。;图3.4 应用程序中各对象之间的创建关系;图3.5 应用程序中各对象之间的访问方法;3.2 菜单设计 ;菜单分为两类: 一类是依附于框架窗口的一般菜单,包括主菜单和子菜单,主菜单(菜单栏)横放在窗口的顶部,它是应用程序的最高层菜单,子菜单是从主菜单下弹出的菜单。 另一类是弹出式菜单,也叫快捷菜单或上下文菜单,它是点击鼠标右键后,在光标所在位置出现的浮动式自由菜单。 ;3.2.1 建立菜单资源; 创建菜单可以有好几种方法,最简单的方法是在属性窗口用菜单编辑器来进行设计。 利用菜单辑器创建菜单资源的主要步骤如下: (1)打开应用程序的菜单编辑器; (2)添加主菜单; (3)添加菜单项,设置菜单项的属性。;【例3.2】编写一个应用程序MyMenu,为程序添加一个“图像”主菜单和它的两个下拉子菜单项“显示”和“删除”。 程序的实现过程如下: (1)创建应用程序,打开菜单编辑器 (2)添加主菜单 (3)添加菜单项,设置菜单项的属性 ;3.2.2 添加命令处理函数 ;在【例3.2】中只添加了菜单资源,并没有实现菜单的功能,即没有对应的命令处理函数与菜单项对应,因此,程序运行后添加的菜单项是灰色的,即处于当前不可用状态。添加新的菜单项后,还应该为新的菜单项指定一个处理函数。 ; 快捷键的添加需要使用快捷键编辑器,添加快捷键的步骤如下: (1)打开应用程序的加速器表; (2)添加新的快捷键; (3)设置快捷键的属性。; Visual C++ 2005的MFC提供的菜单类的对象可以用来表示各种Windows菜单,并且该类可以在程序运

文档评论(0)

1亿VIP精品文档

相关文档