教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

Visual C++程序设计与应用教程课后答案(3)

来源:网络收集 时间:2026-09-14
导读: 7.7 习 题 1.填空题 (1) 在文档/视图结构中,文档是用来管理和组织数据的,视图的作用是显示和编辑文档数据。文档与视图的关系是一对多的关系。 (2) 在文档/视图应用程序中,文档模板负责创建文档/视图结构,而应用

7.7 习 题

1.填空题

(1) 在文档/视图结构中,文档是用来管理和组织数据的,视图的作用是显示和编辑文档数据。文档与视图的关系是一对多的关系。

(2) 在文档/视图应用程序中,文档模板负责创建文档/视图结构,而应用程序对象管理文档模板,可以在应用程序的InitInstance()函数中创建一个和多个文档模板。

(3) 在通常情况下,视图派生类的成员函数中通过调用GetDocument()函数得到当前文档对象的指针。

(4) 文档类的数据成员初始化和文档的清理工作分别在OnNewDocument()成员函数和DeleteContents()成员函数中完成。

(5) MFC提供了两种集合类,一种是基于模板的集合类,另一种是非模板集合类。 (6) MFC应用程序通过CDocument的protected类型成员变量m_bModified的逻辑值来判断程序员是否对文档进行过修改。程序员可以通过CDocument的SetModifiedFlag()成员函数来设置该值。

(7) MFC AppWizard在创建文档应用程序框架时已在文档类中重载了Serialize()函数,通过在该函数中添加代码可以达到实现文档序列化的目的。

(8) 调用create()成员函数创建动态分割窗口,而静态分割窗口是调用CreateStatic()成员函数创建的。 2.简答题

(1) 通过哪几个主要成员函数完成文档与视图之间的相互作用?并简述这些成员函数的功能。

文档与视图的交互是通过下面几个主要的成员函数完成的:

? 视图类CView的成员函数GetDocument()

该函数得到与之相关联的文档对象的指针,利用这个指针就可以访问文档类及其派生类的公有数据成员和成员函数。

? CDocument类的成员函数UpdateAllViews()

该函数通知与文档相关联的所有或部分试图,更新窗口内容。

? 视图类的成员函数OnUpdate()

当应用程序调用CDocument::UpdateAllViews()函数时,实际上是调用了所有相关视图的OnUpdate()函数,以更新相关的视图。需要时,可以直接在视图派生类的成员函数中调用该函数刷新当前视图。另外,在初始化视图成员函数CView::OnInitialUpdate()中也调用了OnUpdate()函数。

? CView类的OnInitialUpdate()函数

当应用程序被启动,或用户从“文件”菜单中选择了“新建”或“打开”命令时,CView的OnInitialUpdate()函数会被调用,该函数是虚函数。CView的OnInitialUpdate()函数除了调用OnUpdate()函数之外,不做其他任何事情。

也可以利用派生类的OnInitialUpdate()函数对视图对象进行初始化。 (2) 简述文档序列化与一般文件处理的区别。

一般文件处理是通过文件句柄来实现磁盘输入和输出,一个文件句柄与一个磁盘文件相关联。而文档序列化与一般文件处理最大的不同在于:在序列化中,对象本身对读和写负责。CArchive类对象并不知道也不需要知道它所读写数的内部结构,CArchive类对象为读写

CFile类对象中的可序列化数据提供了一种安全的缓冲机制,它们之间形成了如下关系:

Serialize()函数 CArchive类对象 CFile类对象 磁盘文件

可见序列化使得程序员可以不直接面对一个物理文件而进行文档的读写。 (3) 如何让用户定义的类支持序列化?

要让用户定义的类支持序列化,必须满足以下5个条件:

? 从CObject类派生,这样派生类就具有RTTI(Run-time type information)、Dynamic

Creation等功能。

? 类的声明部分必须有DECLARE_SERIAL宏,此宏需要1个参数:类名称。

? 类的实现部分必须有IMPLEMENT_SERIAL宏,此宏需要3个参数:一是类名称,

二是基类名称,三是版本号。

? 重新定义Serialize( )虚函数,使它能够适当地把类的成员变量写入文件中。

? 为此类加上一个默认构造函数,这是因为如果一个对象来自文件,MFC必须先动态

地创建它,而且在没有任何参数的情况下调用构造函数,然后才从文件中读取对象数据。

8.5 习 题

1.填空题

(1) MFC通过CView类提供打印功能和打印预览功能。

(2) 在打印过程中,CPrintInfo类的主要作用是在框架窗口和CView类之间传递消息。 (3) CPrintInfo类中的成员变量m_nCurPage表示当前打印/预览的页号,成员函数SetMaxPage( )设置文档的最大打印页数。

(4) 在Windows操作系统中,存在两种类型的坐标:设备坐标和逻辑坐标。

(5) 不同的映射模式将影响输出设备显示的图形尺寸因子,Windows的缺省映射模式是MM_TEXT,在该映射方式中,每一个逻辑单位对应一个设备像素。

(6) 在MFC应用程序中,通过调用CDC类的SetMapMode()函数设置映射方式。

(7) 如果要使程序支持多页打印功能,首先在打印之前设置要打印的页数,然后设置每一页视图原点的打印坐标。

(8) 一般在OnBeginPrinting()函数中设置要打印的页数,在OnPrepareDC()函数中通过调用CDC类成员函数SetViewPortOrg( )设置当前页的视图原点坐标。 2.简答题

(1) 打印和屏幕显示有何异同?

相同点:在MFC应用程序中,打印和屏幕显示最终都是通过调用视图类的OnDraw()函数来完成的。OnDraw()函数有一个指向CDC类对象指针的参数,该对象代表了接收OnDraw()函数输出的设备上下文,它可以是代表显示器的显示设备上下文,也可以是代表打印机的打印设备上下文。

不同点:当窗口显示文档内容时,视图窗口将收到WM_PAINT消息,程序框架将调用OnPaint()函数,OnPaint()函数会调用OnDraw()函数,此时传递给OnDraw()函数的设备上下文参数为显示设备上下文,OnDraw()函数的绘制结果将会输出到显示器。进行打印时,用于打印和打印预览的OnPrint()函数也会调用OnDraw()函数,而此时传递给OnDraw()函数的设备上下文参数为打印机设备上下文,OnDraw()函数的绘制结果也会输出到打印机。

(2) 如何在打印和屏幕显示时输出不同内容? 有两种方法:

? 分别在OnPaint()和OnPrint()这两个函数中完成屏幕输出和打印输出工作,而不必依

赖于OnDraw()函数。 ? OnDraw()函数中,调用pDC->IsPrinting()或设置变量来识别目前进行的输出工作并区

别对待。

(3) 打印预览和打印有何异同?

相同点:在MFC应用程序中,打印和屏幕显示最终都是通过调用视图类的OnDraw()函数来完成的。

不同点:打印预览和打印不同,它是应用程序利用屏幕来模拟打印机输出的过程。进行打印时,传递给OnDraw()函数的设备上下文参数为打印机设备上下文。而为了实现打印预览的功能,MFC类库从CDC类中派生出CPreviewDC类。在进行打印预览时,传给OnDraw()函数的是一个指向CPreviewDC对象的指针。一般CDC类中保存有两套相同的设备描述表,而CPreviewDC类则保存有两套不同的设备描述表,其中的属性设备描述表指向打印机,而输出设备描述表指向屏幕。

(4) MM_LOMETRIC映射方式有何特点?

MM_LOMETRIC映射方式将一个逻辑单位映射到0.l mm, MM_LOMETRIC坐标系统Y轴方向与默认的MM_TEXT相反。

(5) 简述添加打印页眉、页脚的程序代码的步骤。 添加打印页眉、页脚的程序代码可以分两步进行:

? 在OnPrint()函数中利用CPrintInfo*pInfo的成员变量m_rectDraw来设置打印页上打

印区域的大小。

? 在m_rectDraw范围之外打印页眉和页脚。

9.5 习 题

1.填空题

(1) Windows的库类型主要有静态链接库 和 …… 此处隐藏:5299字,全部文档内容请下载后查看。喜欢就下载吧 ……

Visual C++程序设计与应用教程课后答案(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/445757.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)