
出版社: 清华大学
原售价: 59.00
折扣价: 0.00
折扣购买: Visual C++面向对象编程(第4版普通高等教育十一五国家级规划教材)
ISBN: 9787302498544
王育坚,教授。本人长期承担计算机科学与技术专业本科生专业课和专业基础课的教学工作,是北京联合大学计算机科学与技术本科专业负责人,中国计算机学会高级会员、教育专业委员会委员,计算机科学与技术学科硕士生导师、学位委员, 硕士研究生学位论文通讯评议专家。近年来主持北京市精品教材和“十一五”国家规划教材项目,主持北京市财政专项计算机科学与技术等专业建设(市级)项目,主持校级本科骨干建设专业等项目。主持开展专业建设、教学研究和教学改革,获校级教学成果奖3项。近年来主持和参加北京市教委和横向科研、教学研究项目多项,发表学术论文10多篇,出版教材2本,取得软件著作权2项,申请受理专利3项。
第 章 5第5章创建应用程序框架前面几章主要介绍了C++基本程序设计方法,没有涉及Windows编程的内容。从本章开始,重点介绍利用Visual C++进行Windows应用程序设计的方法。与DOS应用程序相比,Windows应用程序以窗口的形式出现,内部采用消息处理机制,其编程原理和方法比较复杂。虽然应用程序的类型很多,但同一类型的Windows应用程序具有类似的界面风格(如相同的菜单栏和工具栏),其程序结构也大致相同。因此,可以为同一类型的应用程序设计一个模板,即应用程序框架(Application FrameWorks,AFX)。本章主要介绍利用MFC AppWizard应用程序向导创建Windows应用程序框架的方法,并介绍ClassWizard类向导和Debug调试工具的使用方法。 5.1应用程序向导 与其他可视化软件开发环境一样,Visual C++ IDE也提供了创建应用程序框架的向导AppWizard和相关的工具。应用程序向导实质上是一个源程序生成器,所完成的工作包括产生源代码、添加资源和设置编译选项。利用不同的应用程序向导可以自动创建不同类型或风格的应用程序,实现代码的可重用。应用程序向导在很大程度上减轻了程序员手工编写代码的工作量,使得程序员可以集中精力编写具体应用的代码。 5.1.1Visual C++向导的类型 Visual C++集成开发环境提供了创建各种类型应用程序的向导,执行File | New命令就列出了所有的应用程序向导,供程序员进行选择。下面给出Visual C++集成开发环境提供的向导类型及简要的说明。 ATL COM AppWizard: 创建一个包含ActiveX控件的活动模板库ATL(Active Template Library)。 Cluster Resource Type Wizard: 创建能够在微软群服务器上模拟和管理的项目。 Custom AppWizard: 利用用户定制的模板向导创建项目。 Database Project: 创建数据库项目。 DevStudio Add_in Wizard: 创建一个用C++或汇编语言编写的、类似于Developer Studio形式的外接程序。 Extended Stored Proc Wizard: 在SQL Server上创建一个建立扩展存储的程序。 ISAPI Extension Wizard: 利用ISAPI(Internet Server API)创建网页浏览程序。 Makefile: 制作Makefile生成文件,定制自己项目的集成开发环境。 MFC ActiveX Control Wizard: 创建基于MFC的ActiveX控件。 MFC AppWizard\\[dll\\]: 创建基于MFC的动态链接库。 MFC AppWizard\\[exe\\]: 创建基于MFC的应用程序,这是最常用的向导。 New Database Wizard: 在SQL服务器上创建一个SQL Server数据库。 Utility Project: 创建自定义编译规则的项目,该项目可以作为一些子项目的主项目,它不产生LIB、DLL或EXE文件。 Win32 Application: 创建Win32应用程序,采用API方法编程。 Win32 Console Application: 创建DOS环境下的Win32控制台应用程序,采用C++或C语言进行编程。这是在前几章中用到的向导。 Win32 DynamicLink Library: 创建Win32动态链接库,采用API方法编程。 Win32 Static Library: 创建Win32静态链接库,采用API方法编程。 Visual C++集成开发环境提供的关于程序的向导种类很多,除了创建基于MFC应用程序的向导,还有创建其他类型应用程序的向导。在上面列出的所有向导中,MFC应用程序向导MFC AppWizard\\[exe\\]是最常用的向导,本节将重点进行介绍。此外,MFC ActiveX Control Wizard、MFC AppWizard\\[dll\\]、Win32 Application、Win32 Console Application、Win32 DynamicLink Library等向导也较常用。 5.1.2MFC AppWizard的使用步骤 区别于DOS应用程序,即使一个最简单的Windows应用程序,也必须是以窗口的形式显示运行,这就需要编写一些复杂的程序代码。同一类型应用程序的框架窗口风格一般相同,如具有相同的菜单栏、工具栏、状态栏和客户区,并且基本菜单命令的功能也相同,如具有相同的文件操作命令和编辑命令。因此,同一类型应用程序建立框架窗口的基本代码都是一样的(尽管有些参数不一定相同),可以为同一类型的应用程序设计一个统一的应用程序框架。为了避免程序员重复编写这些代码,一般的可视化软件开发工具都提供了创建Windows应用程序框架的向导。 MFC AppWizard\\[exe\\]是一个创建基于MFC的Windows应用程序的向导,当利用MFC AppWizard\\[exe\\]向导创建一个项目时,向导能够自动生成一个MFC应用程序的框架。MFC应用程序框架将那些每个应用程序都共同需要的代码封装起来,这些代码完成的任务包括初始化应用程序、建立应用程序界面和处理基本的Windows消息,这样使得程序员不必花费时间去做那些重复的工作,而把精力放在编写实质性的代码上。 即使不添加任何代码,当执行编译、链接命令后,Visual C++集成开发环境也可以利用MFC应用程序框架生成一个Windows界面风格的应用程序。 MFC AppWizard\\[exe\\]向导按步骤引导用户创建一个应用程序框架。在向导的每一步都提供了一个对话框和一些选项,程序员通过选择不同的选项,可以创建不同类型和风格的MFC应用程序,并可定制不同的程序界面窗口。例如,程序是单文档、多文档应用程序,还是基于对话框的程序,是否支持数据库操作,是否可以使用ActiveX控件以及是否具有联机帮助等。 下面以建立一个SDI单文档应用程序为例说明MFC AppWizard\\[exe\\]应用程序向导的使用方法和每一个操作步骤对话框中各选项的含义。 例51编写一个单文档应用程序Mysdi,程序运行后在程序视图窗口中显示文本串“这是一个单文档程序!”。 【编程说明与实现】 (1) 在Visual C++ IDE中执行File | New菜单命令,打开如图51所示的New对话框。 图51New对话框 (2) 确认New对话框的当前页面为Projects,在左栏的项目类型列表框中选择MFC AppWizard\\[exe\\]项,在Project Name框输入项目的名称,本例为Mysdi。在Location框输入项目所在的路径,可以单击其右侧的“…”浏览按钮来对默认的路径进行修改。向导将在该路径下建立一个名为Mysdi的文件夹,用于存放这个项目的所有文件。设置好后,单击OK按钮,打开MFC AppWizardStep1对话框,如图52所示。 图52MFC AppWizard\\[exe\\]第1步 (3) 在MFC AppWizardStep1对话框中选择要创建应用程序的类型,向导可以创建以下3种类型的应用程序。 Single document: 单文档(SDI)应用程序,程序运行后出现标准的Windows界面,它由框架(包括菜单栏、工具栏和状态栏)和客户区组成。程序运行后一次只能打开一个文档。例如,Windows记事本Notepad就是一个SDI应用程序。 Multiple documents: 多文档(MDI)应用程序,与SDI应用程序不同,MDI程序运行后可以同时打开多个文档。例如,Microsoft Word就是一个MDI应用程序。 Dialog based: 基于对话框的应用程序,程序以对话框的形式出现。例如,计算器Calculator就是一个基于对话框的应用程序。 选项中,“Document/View architecture support?”询问是否支持文档/视图结构。“What language would you like your resources in ?”用于选择资源语言的种类。 在本例中,选择Single document,其他使用向导的默认选项。单击Next按钮,打开MFC AppWizardStep 2 of 6对话框,如图53所示。 图53MFC AppWizard\\[exe\\]第2步 (4) 在MFC AppWizardStep 2 of 6对话框中选择应用程序支持数据库的方式,其中包括以下选项。 None: 创建的应用程序不包括任何对数据库的操作功能,但程序员以后可以手工添加对数据库的操作代码。此项为默认选项。 Header files only: 提供了最简单的数据库支持,仅在项目的stdAfx.h文件中使用#include指令包含afxdb.h和afxdao.h两个文件(定义MFC数据库类的头文件),但并不生成与数据库相关的类,程序员需要时可以自己创建。 Database view without file support: 包含了所有的数据库头文件,并生成了相关的数据库类和视图类,但不支持文档的序列化,向导创建的应用程序的File主菜单中将不包含有关文件操作的菜单命令项。 Database view with file support: 包含了所有的数据库头文件,生成了相关的数据库类和视图类,并支持文档的序列化。 值得说明的是,后两个选项必须在上一步选择“Document/View architecture support?”项时才有效。并且,若选择了后两项,还必须通过Data Source按钮设置数据源。 本例使用向导的默认选项,单击Next按钮,打开MFC AppWizardStep 3 of 6对话框,如图54所示。 图54MFC AppWizard\\[exe\\]第3步 (5) 在MFC AppWizardStep 3 of 6对话框中选择应用程序所支持的复合文档类型。OLE和ActiveX一起被称为复合文档技术,其中包括以下选项。 None: 应用程序不支持任何复合文档,该项是默认选项。 Container: 应用程序作为复合文档容器,能容纳所嵌入或链接的复合文档对象。 Miniserver: 微型复合文档服务器,应用程序可以创建和管理复合文档对象,对于所创建的复合文档对象,集成应用程序可以嵌入,但不能链接。微型服务器不能作为一个单独的程序运行,而只能由集成应程序来启动。 Fullserver: 完全复合文档服务器,除了具备上面微型服务器的功能外,应用程序支持链接式对象,并可作为一个单独的程序运行。 Both container and server: 应用程序既可作为一个复合文档容器,又可作为一个可单独运行的复合文档服务器。 Yes, please: 应用程序支持复合文档文件格式的序列化,可以将复合文档对象保存在硬盘中。 No, thank you: 应用程序不支持复合文档文件格式的序列化,只能将复合文档对象加载到内存,不能保存在硬盘中。 Automation: 应用程序支持自动化,应用程序可以操作其他程序所创建的对象,或提供自动化对象给自动化客户访问。 ActiveX Controls: 应用程序可使用ActiveX控件,此项也是默认选项。 在本例中,保留None选项,取消ActiveX Controls选项。单击Next按钮,打开MFC AppWizardStep 4 of 6对话框,如图55所示。 图 55MFC AppWizard\\[exe\\]第4步 (6) 在MFC AppWizardStep 4 of 6对话框中设置应用程序的外观特征,如设置工具栏和状态栏,其中包括以下选项。 Docking toolbar: 默认选项,为应用程序添加一个标准的工具栏。 Initial status bar: 默认选项,为应用程序添加一个标准的状态栏。 Printing and print preview: 默认选项,应用程序支持打印和打印预览的功能。 Contextsensitive Help: 应用程序具有上下文相关帮助功能。 3D controls: 默认选项,应用程序界面具有三维外观。 MAPI(Message API): 应用程序能使用邮件API,具有发送电子邮件的功能。 Windows Sockets: 应用程序能使用WinSock套接字,支持TCP/IP协议。 在该对话框中还可以设置应用程序工具栏的风格,有以下两个选项。 Normal: 应用程序工具栏采用传统风格,此项是默认选项。 Internet Explorer ReBars: 应用程序工具栏采用IE浏览器风格。 在应用程序的File主菜单中会列出最近使用过的文档,“How many files would you like on your recent file list?”框中的数字为可列出文档的最多个数,默认值为4。 单击对话框中右下角的Advanced按钮可进行更高级的设置,可以修改文件名或扩展名,也可以进一步调整程序用户界面窗口的样式,如设置边框厚度和最小化、最大化、关闭按钮等。 同前面一样,本例使用默认选项。单击Next按钮,打开MFC AppWizardStep 5 of 6对话框,如图56所示。 图56MFC AppWizard\\[exe\\]第5步 (7) 在MFC AppWizardStep 5 of 6对话框中设置应用程序的风格,包括以下选项。 MFC Standard: 应用程序采用MFC标准风格(文档/视图结构),该项是默认选项。 Windows Explorer: 应用程序采用Windows资源管理器风格。 在该对话框中还可以选择MFC AppWizard\\[exe\\]向导是否为源代码生成注释。 Yes, please: 向导在源程序中自动加入注释,该项是默认选项。 No, thank you: 向导不在源程序中加入注释。 在该对话框中还可以设置MFC库与应用程序的链接方式。 As a shared DLL: 采用共享动态链接库的方式,即在程序运行时才调用MFC库。采用此方式可减少程序所占空间,该项是默认选项。 As a statically linked library: 采用静态链接库(SLL)的方式,即在编译、链接时把要用到的MFC库与应用程序相链接。采用此方式能提高运行速度,且不用考虑程序最终运行环境中是否有MFC库。但采用此方式增加了程序所占空间。 本例使用默认选项,单击Next按钮,打开MFC AppWizardStep 6 of 6对话框,如图57所示。 图57MFC AppWizard\\[exe\\]第6步 (8) 在MFC AppWizardStep 6 of 6对话框中列出了向导将创建的类,可以修改一些类默认的类名和对应的头文件名、源文件名。对某些类(如CMysdiView)还可以选择不同的基类。单击Finish按钮,打开New Project Information对话框,如图58所示。 图58生成项目的信息 (9) 在New Project Information对话框中,根据用户在前面各步骤对话框中所做的选择列出将要创建项目的有关信息,如应用程序的类型、创建的类和文件名、应用程序的特征以及项目所在的路径。若要修改这些内容,可单击Cancel按钮返回到前一个对话框。最后,单击OK按钮,MFC AppWizard\\[exe\\]向导将开始创建应用程序框架。 当应用程序框架创建成功后,Developer Studio将装入应用程序项目,并在Workspace(工作区)窗口打开这个项目。一个应用程序是以项目为单位来进行组织和管理的。若想在同一个路径下重新创建一个同名的项目,必须首先将原来的项目删除或移走。 利用MFC AppWizard\\[exe\\]向导创建应用程序框架后,无须手工添加任何代码,就可以对程序进行编译、链接,生成一个应用程序。但一般情况下,程序员应根据程序功能需要,利用Developer Studio中的集成工具向应用程序框架添加具体的代码。 在本例中,需要在成员函数CMysdiView∷OnDraw()中添加显示文本“这是一个单文档程序!”的代码。在Workspace窗口单击ClassView页面,单击CMysdiView类左边的“+”展开该类,双击其中的成员函数OnDraw(),在编辑窗口出现该成员函数的代码,在指定位置添加如下黑体所示的代码。void CMysdiView :: OnDraw(CDC pDC) { CMysdiDoc pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->TextOut(100, 100, \"这是一个单文档程序!\");// 在坐标(100, 100)处显示文本串 }函数TextOut()是CDC类的成员函数,其功能是在指定位置输出字符串。第1、2个参数是坐标位置,第3个参数是要输出的字符串。MFC应用程序一般在视图类的成员函数OnDraw()中实现屏幕输出,因为在重绘程序窗口时将自动调用函数OnDraw(),这样保证了要输出的内容在每一次打开窗口时都能够显示。图59运行程序Mysdi 执行Build命令(F7键)编译链接程序,程序运行后将在程序视图窗口显示文本串“这是一个单文档程序!”,其运行结果如图59所示。 在Workspace窗口的ClassView页面展开一个类,可以看到每一个类的成员变量和成员函数的左边都有一个小图标,它们分别有不同的含义,表示成员变量和成员函数的3种访问属性。每种图标及说明如表51所示。表51ClassView中各图标的含义 图标说明图标说明表示公有成员变量表示公有成员函数表示私有成员变量表示私有成员函数表示保护成员变量表示保护成员函数若在MFC AppWizardStep 1对话框(如图52所示)中选择Dialog based项,向导将创建一个基于对话框的应用程序。这时,MFC AppWizard\\[exe\\]向导将给出与创建单文档和多文档应用程序有所不同的操作步骤,其主要原因是基于对话框的应用程序一般不包含文档操作,不支持数据库和复合文档的使用。基于对话框的应用程序运行后首先出现一个对话框,一般的软件安装程序就是由一系列对话框组成的。下面通过一个例子说明如何利用MFC应用程序向导创建一个对话框应用程序。 Visual C++程序设计课程的教学主要有四个难点:C++语言的面向对象机制、MFC类库功能的庞大、Windows编程的复杂性以及应用程序框架的透明性。针对这四个难点,本书在第3版的基础上,力求科学、系统地表达教学内容及相互的联系,力求在基本概念、原理和方法的阐述上准确、精练,深入浅出,从而使读者能够在质上把握Visual C++编程的精髓。本书注重理论联系实际,既重视理论和方法的介绍, 又重视具体技术的讨论和实际问题的分析、解决。本书适合用做计算机专业课的教材或教学参考书,也可作为广大Visual C++程序员的培训或自学教程。“C++程序设计”已成为高等院校本科相关专业的必修课,目前此类教材主要侧重于介绍C++的语法知识和面向对象程序设计方法,基本不涉及到当前实用的Windows编程理论和方法。本教材针对上述两类教材的特点,按照高等学校本科教材的体系结构和基本要求,既系统、正确地阐述了C++面向对象程序设计的理论和方法,又全面介绍了Visual C++程序设计方法。本教材填补了上述两类教材间的空白,满足了一些高校两方面综合的教学需要。教材中的例题要体现当前编程技术的发展方向,并在实际应用实例的基础上都进行一些简化,这样既精简了版面,又避免了喧宾夺主。区别一般的技术读物,教材将提供丰富的习题(包括上机编程题),并且习题都是围绕书中例题而展开的,使读者能够马上学以所有。这样激发了学生的学习兴趣,强化了学习效果。