第三章 单文档应用程序
- 格式:doc
- 大小:284.00 KB
- 文档页数:10
C++课后习题第一章1.选择题(1) 应用程序向导AppWizard的作用是,通过类向导可以增加消息映射和成员变量。
(2) 项目工作区窗格一般在集成开发环境的左侧,他展示一个项目的几个方面,他们分别是类视图、资源视图和文件视图。
(3)用户可以通过项目工作区窗格的资源视图来查看资源。
(4)项目工作区文件的扩展名为.dsw(5)菜单选择可以通过两种方法来进行:一种是鼠标选择;另一种是键盘选择(6)编译程序的快捷键是Ctrl+F7 ,链接程序的快捷键是F7 ,运行程序的快捷键是Ctrl+F5(7)编译微型条工具栏最右边按钮的功能是Insert/Remove Breakpoint(8)快捷键或菜单及相关资料符号的前缀是IDR2.选择题(1)用应用程序向导AppWizard创建C++源文件,应选择(A )选项卡。
A.FilesB.ProjectsC.WorkspacesD.Other Documents(2)项目文件的扩展名( B )。
A. .exeB. .dspC. .dswD. .cpp(3)Standard 工具栏中最左边按钮与(C )菜单命令的功能一样。
A.NewB.New FileC.New Text FileD.New Workspace(4)Windows资源提供的资料编辑器不能编辑(C )。
A.菜单B.工作栏C.状态栏D.位图3.判断题(1)通过应用程序向导AppWizard建立的程序不能被立即执行。
(×)(2)打开一个项目,只需打开对应的项目工作区文件。
(√)(3)用户可以通过选择T ools | Customize菜单命令设置集成开发环境的工具栏。
(√)(4)在同一项目中,Visual C++在内部用来标识资源的资源符号不能重复。
(√)(5)在Windows环境下,资源与程序源代码紧密相关。
(×)4.简答题(1)什么是项目?它是由什么组成的?(2)解释项目工作区中各个视图的功能。
Visual C++程序设计实验指导书实验1 认识Visual C++6.05中文版开发环境实验内容(1)熟悉VisualC++6。
05的开发环境。
(2)操作工具栏和项目工作区窗口。
(3)用应用程序向导创建一个控制台应用项目Ex_Hello。
(4)输入并执行一个新的C++程序Ex_Simple.实验准备和说明(1)建议在本教材第一次上课时进行本次实验。
(2)熟悉Windows 2000或XP操作系统的环境和基本操作。
(3)熟悉实验报告的书写格式,这里给出一下建议:实验报告采用A4纸,封面一般包括实验目次.实验题目,班级,姓名,日前和机构名称.报告内容一般包括实验目的和要求。
实验步骤,实验思考和总结。
需要指出的是,实验步骤不是书本内容的重复,而是自己结合实验内容进行探索的过程,教师也可根据具体情况提出新的实验报告格式和新的要求.(4)阅读以下关于VisualC++的说明:Visual C++是Microsoft公司推出的目前使用极为广泛的基于WINDOUWS平台的可视化编程环境。
是在以往的版本不断更新的基础上形成的,其功能强大,灵活性好,完全可以扩展以及具有强有力的Internet支持,在各种c++语言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。
Visual C++6。
0分为标准版,企业版和专业版3种,但其基本功能是相同。
Visual C++6。
5中文版是在Visual C++6。
0基础上进行汉化的以一个版本,本书以此版本作为编程环境。
为统一起见,我们仍称之为Visual C++6.0。
实验步骤1。
打开计算机,启动windouws2000操作系统2。
建工作文件夹3。
启动Visual C++6.04。
创建一个控制台应用项目5。
认识开发环境界面6。
认识工具栏7。
工具栏的显示和隐藏8.工具栏的浮动与停泊9。
项目工作区窗口10。
修改代码,编译运行11。
输入一个新的C++程序12。
修正语法错误13.退出Visual C++6。
第一章信息技术与计算机文化1.1信息与信息技术1.控制论创始人信息论创始人2.信息是在自然界、人类社会和人的思维活动中普遍存在的一切物质和事物的属性。
()3.数据是信息的,是信息的,信息是对数据进行加工后得到的结果。
信息是数据的。
4.有数据不一定有信息,有信息一定有数据。
()5.信息高速公路特点:、、(1993 年提出)6.(时间),在(地点),召开第三届。
7.所谓计算机文化,就是以计算机为核心,集网络文化、信息文化、多媒体文化于一体,应对社会生活和人类行为产生广泛、深远影响的新型文化。
()8.人类文化发展的四个里程碑:、、、1.2计算机技术概论9、布尔:查尔斯.巴贝奇:10.第一台电子计算机:,(时间)(地点)第一台电子计算机特点:①②③11.计算机的发展年代名称元件语言应用第一代第二代第三代第四代12.我国计算机的发展:1958 年1964 年1971 年1983 年13.计算机特点:①②③④⑤⑥14.计算机的分类:按照处理的对象划分:、、按照计算机用途划分:、按照计算机规模划分:、、、、15.计算机的应用:①(数值计算)②(数据处理)③④计算机辅助设计()CAM计算机辅助教育()CAE CAI计算机管理教学()计算机辅助测试()CIMS⑤:开发了、、、⑥:计算机的发展趋势:、、、⑦⑧1.3计算机中信息的表示16.数制:连续的几个1是2的几次方减1(2n-1),1后边连续几个0是2的几次方17.B O D H19.逻辑运算规则:∧∨⊕–逻辑异或运算(XOR ):0⊕0=0, 0⊕1=1, 1⊕0=1, 1⊕1=0逻辑与运算(AND ):0∧0=0, 0∧1=0, 1∧0=0, 1∧1=1逻辑或运算(OR ): 0∨0=0, 0∨1=1, 1∨0=0, 1∨1=1逻辑非运算(NOT ):互为相反逻辑异或运算即实现按位加的功能,只有当两个逻辑值不同时,结果才为 1 18.位(bit )也成为,简记为b ,是计算机存储数据的。
VS2020/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)这里给大伙儿一个简单的例子,演示如何生成单文档应用程序框架。
解决方案与工程在VS2020的利用介绍中已经讲了解决方案与工程的概念,那个地址再重提一下。
每一个应用程序都作为一个工程来处置,它包括了头文件、源文件和资源文件等,这些文件通过工程集中治理。
在VS2020中,工程都是在解决方案治理之下的。
一个解决方案能够治理多个工程,能够把解决方案明白得为多个有关系或没有关系的工程的集合。
VS2020提供了一个Solution Explorer解决方案阅读器视图,能够显示当前解决方案的内容,当新建一个工程时能够选择新建一个解决方案仍是加入当前解决方案。
以下图左侧面板中正在显示的视图确实是Solution Explorer,视图中有一个解决方案-HelloWorld,此解决方案下有一个同名的工程-HelloWorld。
在应用程序向导生成应用程序后,VS2020会在用户设置的途径下,以解决方案名为名称成立一个目录,里面寄存自动生成的文件。
利用VS2020应用程序向导生成单文档应用程序框架那个地址简略演示下如何生成单文档应用程序框架,让大伙儿先有个直观的了解,有不睬解的地址能够留着以后回来再看。
下面依照操作步骤一步步讲解:1.点菜单栏File->New->Project,弹出New Project对话框,咱们能够选择工程类型。
若是安装完VS2020以后第一启动时已经设置为VC++,那么Installed Templates->Visual C++项会默许展开,而若是没有设置VC++,那么能够展开到Installed Templates->Other Languages->Visual C++项。
因为咱们要生成的是MFC程序,因此在“Visual C++”下选择“MFC”,对话框中间区域会显现三个选项:MFC ActiveX Control、MFC Application和MFC DLL。
第三章Word软件的应用(习题)1、下列关于文字处理软件Word文档窗口的说法中,正确的是( )。
A. 只能打开一个文档窗口B. 可以打开多个,但只有一个是活动窗口C. 可打开多个,但只能显示一个D. 可以打开多个活动的文档窗口2、在Word编辑文本时,要调节行间距,则应该选择功能区( )。
A. “页面布局”选项卡中的“分隔符”B. “开始”选项卡中的“字体”C. “开始”选项卡中的“段落”D. “视图”选项卡中的“显示比例”3、在Word文档中不能直接插入的是( )。
A. 艺术字B. 图表C. .JPG格式的文件D. .swf格式的文件4、在汉字字模库中,16×16点阵字形码用( )个字节存储一个汉字。
A. 32B. 48C.64D. 725、启动Word 2010后,第一个新文档自动命名为( )。
A. DOC1B. 新建文档1C. 文档1D. 没有文件名6、在Word文档中,下列关于字号大小比较的说法正确的是( )。
A. “四号”字大于“五号”字B. “四号”字小于“五号”字C. 16磅字大于18磅字D. “初号”字小于“一号”字7、关于Word分栏功能,下列说法中正确的是( )。
A. 最多可分两栏B. 各栏的宽度必须相同C. 各栏的宽度可以不同D. 栏间距是固定的8、输出汉字时,其文字质量与( )有关。
A. 显示屏大小B. 打印机速度C. 计算机主频D. 汉字所用的点阵类型9、Word 2010能正常打开( )类型的文件。
A. .xlsxB. .jpgC. .txtD. .pptx10.在Word的编辑状态,使用“文件”选项卡的“另存为”命令保存文件时,不可以( )。
A.将文件保存为文本文件 B.将文件存放到另一驱动器中C.修改原文件的扩展名而形成新文件D.保存到新文件后,自动删除原文件11.在Word的编辑状态下,拟选中一个自然段,可将鼠标指针移到本段左边的选定栏,然后( )。
© 2016福昕软件保留所有权未经福昕公司授权,此文档禁止以任何形式复制、转移、分配或储存。
Anti-Grain Geometry -Version 2.3Copyright (C) 2002-2005 Maxim Shemanarev ()在所有副本中的版权提示允许的情况下,您可以复制、使用、修改、出售和分配该软件。
此软件不含任何隐藏条款,对于使用本软件所产生的任何后果,均由用户本人承担。
目录目录 (2)第一章–概述 (4)Foxit PhantomPDF概述 (4)关于手册 (6)快速安装指南 (6)第二章–使用入门 (7)工作区域 (7)偏好设置 (10)第三章–阅读 (11)打开/关闭/保存PDF文档 (11)与IFilter的绑定 (12)阅读 (12)SharePoint集成 (28)选择&复制 (30)其他 (32)第四章–创建 (35)用不同方式创建PDF文档 (35)第五章–编辑 (41)撤销和重做 (41)链接 (41)附件 (45)书签 (48)图像 (50)多媒体 (56)第六章–注释 (63)注释工具 (63)更改注释外观 (74)管理注释 (76)第七章–表单 (83)交互式表单和非交互式表单 (83)填写PDF表单 (83)添加表单注释 (85)导入&导出表单数据 (86)第八章–签名 (87)PDF快速签名 (87)数字签名 (88)第九章–打印 (91)打印PDF文档 (91)设置“打印”对话框 (92)设置Foxit PhantomPDF Printer属性 (94)第十章–附录 (96)键盘快捷键 (96)命令行 (99)支持 (100)用户反馈 (100)技术支持 (100)第一章 – 概述Foxit PhantomPDF 概述Foxit PhantomPDF ,是一套专业、安全、实用的PDF 解决方案,功能强大且运行快速。
Foxit PhantomPDF 分两个版本:Foxit PhantomPDF Express 和Foxit PhantomPDF Business 。
第一章Windows程序设计基础Windows的特点:(1)直观,高效的面向对象的图形用户界面,易学易用。
(2)用户界面统一,友好,美观。
(3)丰富的设备无关的图形操作。
(4)多任务的实现。
操作系统的主要功能有进程管理,内存管理,设备管理,文件系统,用户管理等。
操作系统的分类:(1)单用户单任务操作系统(2)单用户多任务操作系统(3)多用户多任务分时操作系统(4)网络操作系统API(Application Programming Interface 应用程序编程接口)是用来控制Windows各个元素的外观和行为的一套预先定义的Windows函数。
MFC(Microsoft Foundation Classes 微软基础类库)是由微软公司提供的用于在Visual C++环境下编写Windows应用程序的一个框架和引擎,是Windows下应用程序的编程语言接口。
虚拟机:由Windows在内存中创建的逻辑微机,由它来运行应用程序。
内存,准确的说是无力内存。
运行任何一个程序都是要占用物理内存,当关闭这个程序时,系统也会从物理内存中删除这个程序的信息,也称释放内存。
习题:5.Windows的多任务是如何实现?答:当Windows接收到由鼠标,键盘,定时器信号或某些I/O操作产生的“事件”后,为该任务分配CPU时间。
每个任务使用由Windows分配的短暂的时间片轮流使用CPU,由于CPU对每个时间片的处理速度非常快,在用户看来好像这些任务在同时执行。
6.API和MFC的作用是什么?答:上有不做总结。
第二章Windows编程概述Windows基础用户界面对象包括:窗口,标题栏,图标,光标,插入符号,对话框,控件等。
*indows定义的别名:Typedef unsigned long DWORD;无符号长整形Typedef int BOOL;整形Typedef unsigned char BYTE;无符号字符型Typedef float FLOAT;单精度浮点型Typedef unsigned int UINT;无符号整形句柄与存放地址所占用字节一样,4字节,32位。
第一章 Windows应用程序基础知识1-2 什么是Windows API函数?答:用来开发Windows SDK应用程序的软件开发工具包是用C语言编写的一个大型函数库,这个库中的函数叫做API函数。
1-5 什么是事件?试举例说明。
答:能触发程序做出相应反应的因素或动作叫做“事件”。
例如,在键盘上按下了一个键、鼠标的单击或双击、应用程序窗口的显示和销毁等。
1-7 什么是消息循环?答:在创建了窗口的应用程序中,应用程序将不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列获取消息,这个不断重复的工作过程叫做消息循环。
1-9说明Windows应用程序的主函数、窗口函数与Windows系统之间的关系。
答:Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。
第二章 Windows应用程序的类封装2-1 在窗体类CframeWnd中需要封装哪些成员?答:在窗体类CframeWnd中要封装窗口句柄、窗口类的定义、注册窗口类、创建窗口、显示更新窗口。
2-3 在MFC程序设计中,如果要建立拥有自己风格的主窗口,应该重写什么函数。
答:继承CWinAPP类并需要重写该类的成员函数InitInstaance。
2-4什么是消息映射表?答:在Windows SDK应用程序的窗口函数中,是采用switch-case分支结构实现消息处理的,这种方式不适合面向对象设计的要求。
因此MFC建立了一套自己的消息映射机制——消息映射表。
从外观来看,这种表有些类似学校中使用的学生名册,学号相当于消息号,学生姓名就相当于消息处理函数名,学号和学生号一一对应(映射)。
而MFC把实现表的代码用宏封装起来了。
第三章 MFC应用程序框架3-3简述构成文档/视图结构应用程序框架的四个MFC派生类,并说出它们的功能。
第三章单文档应用程序在本学习情境中主要学习:(1)单文档应用框架(2)文档与视图3.1 MFC消息处理3.1.1事件驱动程序设计事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。
对于需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代的优点。
它是一种面向用户的程序设计方法,它在程序设计过程中除了完成所需功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序。
它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。
它的框图如图1所示:图1事件驱动程序模型3.1.2 MFC的消息处理在DOS应用程序下,可以通过getchar()、getch()等函数直接等待键盘输入,并直接向屏幕输出。
而在Windows下,由于允许多个任务同时运行,应用程序的输入输出是由Windows 来统一管理的。
Windows操作系统包括三个内核基本元件:GDI, KERNEL ,USER。
其中GDI(图形设备接口)负责在屏幕上绘制像素、打印硬拷贝输出,绘制用户界面包括窗口、菜单、对话框等。
系统内核KERNEL支持与操作系统密切相关的功能:如进程加载,文本切换、文件I/O,以及内存管理、线程管理等。
USER为所有的用户界面对象提供支持,它用于接收和管理所有输入消息、系统消息并把它们发给相应的窗口的消息队列。
消息队列是一个系统定义的内存块,用于临时存储消息;或是把消息直接发给窗口过程。
每个窗口维护自己的消息队列,并从中取出消息,利用窗口函数进行处理。
框图2如下:图2 消息驱动模型从消息的发送途径上看,消息分两种:队列消息和非队列消息。
队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给目的窗口过程。
Windows维护一个系统消息队列(System message queue),每个GUI线程有一个线程消息队列(Thread message queue)。
鼠标、键盘事件由鼠标或键盘驱动程序转换成输入消息并把消息放进系统消息队列,例如WM_MOUSEMOVE、WM_LBUTTONUP、WM_KEYDOWN、WM_CHAR等等。
Windows每次从系统消息队列移走一个消息,确定它是送给哪个窗口的和这个窗口是由哪个线程创建的,然后,把它放进窗口创建线程的线程消息队列。
线程消息队列接收送给该线程所创建窗口的消息。
线程从消息队列取出消息,通过Windows把它送给适当的窗口过程来处理。
除了键盘、鼠标消息以外,队列消息还有WM_PAINT、WM_TIMER和WM_QUIT。
这些队列消息以外的绝大多数消息是非队列消息。
通过消息映射,我们可以把消息和它的消息处理函数联系起来。
VC++为我们提供了Class Wizard 来为用户添加一个消息映射关系,而用户只需编写该消息发生响应的函数即可。
从View菜单中选择“ClassWizard”命令,便可调出如图3所示的ClassWizard对话框,它一共分为五个选项卡,依次分别是消息映射、成员变量、自动化、ActiveX事件和类信息。
最常用的是消息映射和成员变量两个选项卡,如果程序中使用了ActiveX控件,那么还需要使用ActiveX事件选项卡来添加事件处理函数,类信息选项卡可用来了解各个类的文件名、基类和资源等信息,自动化选项卡只有在编写OLE自动化服务器时才用得着。
下面我们就来看看消息映射和成员变量两个选项卡的特点和用途。
消息映射选项卡主要用途是为选中的类添加消息处理函数。
其中,Projects组合框用于选择Workspace中的一个工程,Class name组合框用于选择工程中的一个类。
Objects IDs中列出了所选择的类的名称及属于它的一系列ID,对于CXXXView类来说,列出的ID基本上都是菜单命令,对于一个对话框类来说,列出的ID多数对应着对话框模板中的控件。
从Objects IDs选择不同的类名或ID后,右边的Messages列表框中的内容也会跟着改变,选中类名时,Messages列表框中会显示出所有该类能处理的标准Windows消息以及该类可以重载的成员函数,选中一个ID时,Messages列表框中会显示出这个ID对应的对象(菜单选项或控件)所能引发的命令消息和通知消息。
在Messages列表框中选择一条消息(或一个可以重载的成员函数)后,如果该消息还没有相应的消息处理函数(或还未重载该成员函数),那么ClassWizard对话框右上角的Add Function按钮就会变为有效,提示我们可以添加一个消息处理函数(或重载该成员函数),按下Add Function按钮后,ClassWizard 就会在所选的类中添加一个处理函数(为一个ID添加处理函数时,还会弹出一个对话框,要求输入函数名),并在Member funtions列表框中显示出刚添加的函数,在这个列表框中双击该函数名后,ClassWizard对话框将自动关闭,文本编辑器会定位在函数的实现代码处,这些代码及它在类定义中的声明都是由ClassWizard自动生成的。
图3Class wizard 对话框Member functions列表框并没有列出类的所有成员函数,而只是列出了消息处理函数和重载的成员函数,其中每个函数的左边都有一个小图标,如果小图标为“W”字样,表示该函数是一个消息处理函数,除了Add function按钮外,消息映射选项卡中还有三个按钮,其中Delete Function用来删除一个消息处理函数或重载的成员函数,但是此按钮只能删除函数在类定义中的声明,函数的实现代码还需要手工来删除;Edit Code按钮的用途相当于在Member functions中双击一个成员函数;Add Class按钮则可用于向工程中添加一个新的类。
3.1.3 文档与视图先利用Appwizard 来新建一个单文档工程。
在SDI框架程序中,主要包含四个类:主框架类:CMainFrame用于管理主程序窗口,从MFC 类的CFrameWnd派生。
应用类:CXXXApp负责初始化及程序结束前的整理工作,从MFC 类的CWinApp派生。
文档类:CXXXDoc负责存放程序数据和在磁盘上读写数据,从MFC 类的CDocment 派生。
视图类:CXXXView负责数据的显示及处理用户的输入,从MFC类的CView派生。
用户对话框类:CAboutDlg负责用户对话框的设置,从MFC类的CDialog类派生。
文档是存储的对象.文档类负责数据的维护,包括数据的读取、存储和修改,并将更改的数据通知相关视图,另外它还负责将数据存储到文件及从文件中读取数据。
文档是一种数据源,数据源有很多种,最常见的是磁盘文件,但它不必是一个磁盘文件,文档的数据源也可以来自串行口、网络或摄像机输入信号等。
文档对象负责来自所有数据源的数据的管理。
视图类的作用是与用户交互。
视图对象负责对保存在文挡对象中的数据以某种方式进行显示,并接受用户的输入,将这些输入交文挡类进行处理。
视图是数据的用户窗口,为用户提供了文档的可视的数据显示,它把文档的部分或全部内容在窗口中显示出来。
视图还给用户提供了一个与文档中的数据交互的界面,它把用户的输入转化为对文档中数据的操作。
每个文档都会有一个或多个视图显示,一个文档可以有多个不同的视图。
比如,在Excel电子表格中,我们可以将数据以表格方式显示,也可以将数据以图表方式显示。
一个视图既可以输出到窗口中,也可以输出到打印机上。
图文档与视图关系3.1.4 鼠标消息举例我们先通过一个例子来说明如何用class wizard 来实现捕获鼠标消息,进行消息映射和定义消息处理函数.利用class wizard来设置消息选项。
选择ClassName中的CXXXView,选择其中相对应的WM_LBUTTONDOWN,双击选中的消息,单击Edit Code 按纽,如图4所示,并增加相关代码,如图5所示。
图4 增加鼠标消息映射图5 增加代码图6 运行结果3.1.4键盘消息举例键盘的输入是从扫描码开始的,windows键盘驱动程序将这些扫描码转换成为与硬件无关的形式,即虚拟键码.WM_CHAR:此消息在键被按下时产生,通常用于处理非打印键中的按键消息.图7 在工程中增加相关变量图8 增加变量Text图9 初始化变量为空图10 增加键盘的消息影射图11 编写Onchar处理函数图12 输出接收到的字符图13 运行结果为了能够实现输入字符的换行功能,在CXXXDoc类中增加一个用来计算行数的成员变量m_Line,如图14所示,并初始化变量m_Line,如图15所示。
图增加成员变量图15 初始化成员变量为了保存字符串行的数据,定义一个字符串列表变量m_strList,如图16所示。
图16 定义字符串列表变量修改CXXXView类中的OnChar函数,如下所示。
void CSDIView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: Add your message handler code here and/or call defaultCSDIDoc *pDoc=GetDocument();ASSERT_V ALID(pDoc);if(nChar==VK_RETURN){pDoc->m_Line++;pDoc->m_strList.AddTail(pDoc->Text);pDoc->Text.Empty();Invalidate();}else{pDoc->Text+=nChar;CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);int nLineHeight=tm.tmHeight+tm.tmExternalLeading;dc.TextOut(0,pDoc->m_Line*nLineHeight,pDoc->Text);}CView::OnChar(nChar, nRepCnt, nFlags);}为了保证能够将CXXXDoc类中m_strList的数据输出出来,增加一个DrawText函数,如图17所示和图18所示。
图17 在CXXXDoc类中增加成员函数图18 增加DrawText函数实现CXXXDoc类中的DrawText函数,如下所示。
void CSDIDoc::DrawText(CDC *pDC){TEXTMETRIC tm;CString str;int line=0;pDC->GetTextMetrics(&tm);int nLineHeight=tm.tmHeight+tm.tmExternalLeading;POSITION pos=m_strList.GetHeadPosition();for(;pos!=NULL;m_strList.GetNext(pos)){str=m_strList.GetAt(pos);pDC->TextOut(0,line*nLineHeight,str);line++;}}修改CXXXView类中的OnDraw函数,如下所示。