创建应用程序框架(C教程PPT课件).ppt

上传人:博****1 文档编号:569346857 上传时间:2024-07-28 格式:PPT 页数:46 大小:1.02MB
返回 下载 相关 举报
创建应用程序框架(C教程PPT课件).ppt_第1页
第1页 / 共46页
创建应用程序框架(C教程PPT课件).ppt_第2页
第2页 / 共46页
创建应用程序框架(C教程PPT课件).ppt_第3页
第3页 / 共46页
创建应用程序框架(C教程PPT课件).ppt_第4页
第4页 / 共46页
创建应用程序框架(C教程PPT课件).ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《创建应用程序框架(C教程PPT课件).ppt》由会员分享,可在线阅读,更多相关《创建应用程序框架(C教程PPT课件).ppt(46页珍藏版)》请在金锄头文库上搜索。

1、3.6 综合练习题目:针对学生管理系统,以面向对象的方法在控制台环境下编写一个小程序。所要求的内容如下:1、有基类、子类至少两层;2、在类中应该有静态数据成员和函数;3、打印输出函数采用内联函数形式;4、输出成员变量的值采用const方法;5、要求在类中实现类“+”运算符;6、程序可执行。CStudentCComputerStudentCSportStudentCArtStudentCSportArtStudent虚拟继承虚拟继承第 4 章 创建应用程序框架【学习目标学习目标】 要创建应用程序框架,首先要了解应用程序向导,通过应用程序向导用户可以创建单文档、多要创建应用程序框架,首先要了解应用

2、程序向导,通过应用程序向导用户可以创建单文档、多文档和对话框等不同的应用程序框架。为了更好的使用应用程序向导,单单会创建是不够的,还要文档和对话框等不同的应用程序框架。为了更好的使用应用程序向导,单单会创建是不够的,还要了解应用程序向导生成的文件都有什么用途,这样才能编写好程序,并且还要熟练的调试程序,才了解应用程序向导生成的文件都有什么用途,这样才能编写好程序,并且还要熟练的调试程序,才可以编写出高质量的程序。本章主要介绍应用程序框架的相关内容,包括应用程序的创建、生成文可以编写出高质量的程序。本章主要介绍应用程序框架的相关内容,包括应用程序的创建、生成文件介绍及调试信息等内容,通过学习本章

3、,读者可以了解以下内容:件介绍及调试信息等内容,通过学习本章,读者可以了解以下内容: l l应用程序向导应用程序向导 l l应用程序向导生成的文件应用程序向导生成的文件 l lClassWizard类向导类向导 l l程序调试程序调试4.1 应用程序向导 与其他的可视化编程语言一样,Visual C+ 6.0也提供了向导的功能,实际上,向导就是快速生成资源及代码的工具。有了这些向导,可以减轻程序员手工编写代码的工作量,使程序员能把精力放在具体代码的编写上。nVisual C+中的向导类型n使用应用程序向导Visual C+中的向导类型 Visual C+功能十分强大,可以创建多种文件类型,所以

4、其向导的类型也很多。当用户执行“File”/“New”菜单命令时,就可以看到这些应用程序向导类型的列表,如图4-1所示。 Visual C+中的向导类型Visual C+集成开发环境中向导类型及生成的程序说明如下: lATLCOMAppWizard:创建包含ActiveX控件的ATL(ActiveTemplateLibrary)。 lClusterResourceTypeWizard:创建能够在微软群服务器上模拟和管理的项目。 lCustomAppWizard:以用户定制的模板向导创建项目。 lDatebaseProject:创建数据库项目。 l DevStudioAdd-inWizard:创

5、建C+或汇编语言编写的类似于DeveloperStudio形式的外接程序。 lExtendedStoredProcWizard:在SQLServer上创建一个扩展存储的程序。 lISAPIExtensionWizard:利用ISAPI(InternetServerAPI)创建网页浏览程序。 lMakefile:制作Makefile文件,订制自己项目的集成开发环境。 lMFCAcitveXControlWizard:创建基于MFC的ActiveX控件。 lMFCAppWizarddll:创建基于MFC的动态连接库。 lMFCAppWizardexe:创建基于MFC的应用程序,这是最常使用的一个向

6、导。 lNewDatabaseWizard:在SQLServer上创建一个SQLServer数据库。 lUtilityProject:创建自定义编译规则的项目,该项目可以作为一些子项目的主项目, 它不产生LIB、DLL或EXE文件。 lWin32Application:创建Win32应用程序,可不使用MFC,采用SDK方式编程或C语言编程。 lWin32Dynamic-LinkLibrary:创建Win32动态连接库,采用SDK方法。 lWin32StaticLibrary:创建Win32静态连接库,采用SDK方法。 其中,最常使用的是MFC AppWizardexe,这也是本章讲述的重点。

7、使用应用程序向导 通过前面的学习,读者已经熟悉了构建控制台应用程序,但这不是真正意义上的Windows下可视化程序。下面来看一下如何通过应用程序向导创建应用程序框架,其具体操作步骤如下:(1)启动Visual C+6.0集成开发环境,单击菜单栏中的“File”/“New”命令,打开New窗口。 (2)在New窗口中选择Projects选项卡,在列表中选择MFC AppWizardexe项,在Project name文本框中输入工程名Hello,在Location文本框中设置工程文件存放的位置为“D:Hello”,如图4-2所示。使用应用程序向导 (3)单击OK按钮,弹出MFC AppWizar

8、d Step1窗口,如图4-3所示。 在“MFC AppWizard Step1”窗口中可以设定以下3种类型的程序。 lSingledocument:一次只能打开一个文档编辑窗口。 lMultipledocument:在应用程序中可同时打开多个文档。 lDialogbased:在对话框基础上建立的程序。Document/View architecture support:该选项允许生成文档/视图和非文档/视图结构程序。(4)这里选择Dialog based单选项,单击Next按钮,打开MFC AppWizardStep 2 of 4窗口,如图4-4所示。使用应用程序向导在MFC AppWiza

9、rdStep 2 of 4窗口中有如下设置。 lAboutbox:生成“关于”对话框。 lContext-sensitiveHelp:生成支持上下文相关帮助的帮助文件。 l3Dcontrols:具有3D效果的程序界面。 lAutomation:应用程序能够操作在其他应用程序中实现的对象,或者自己的应用程序 可供Automation客户使用。 lActiveXControls:支持ActiveX控件。 lWindowsSockets:支持基于TCP/IP协议的网络通信。Pleaseenteratitleforyourdialog:设置应用程序主窗口的标题。 使用应用程序向导(5)单击Next按钮

10、,打开MFC AppWizard Step 3 of 4窗口,如图4-5所示。在MFC AppWizardStep 3 of 4窗口中有如下设置。 lMFCStandard:标准MFC项目。 lWindowsExplorer:“Windows资源管理器”风格项目。 lYes,please:在源文件中添加注释。 lNo,thankyou:不添加注释。 lAsasharedDLL:共享动态链接库。 lAsastaticallylinkedlibrary:静态链接库。(6)单击Next按钮,打开MFC AppWizard Step 4 of 4窗口,如图4-6所示。 使用应用程序向导(7)在MFC

11、AppWizard Step 4 of 4窗口中确定类的名称及所在文件的名称,单击Finish按钮,打开New Project Information窗口,如图4-7所示。使用应用程序向导(8)在New Project Information窗口中显示将要创建的文件清单,单击OK按钮完成对话框应用程序的创建。 4.2 应用程序向导生成的文件n文件类型n典型文件举例文件类型 在创建了项目以后,为了更好的了解应用程序向导,还要属性应用向导生成的文件,各文件的含义如表4-1所示。扩展名描述opt工程中关于开发环境的参数选项文件clw类向导文件信息,是按INI文件格式存储的dsp工程文件dsw工作区文

12、件,将项目的详细情况组合到Workspace工作区中aps资源辅助文件,二进制格式plg编译信息文件,存储错误或警告信息hpj帮助文件bsc代码浏览文件,如果使用源代码浏览器,必须生成该文件map可执行文件的映像信息记录文件pch预编译文件,可以加快编译速度pdb记录了程序有关的一些数据和调试信息,在调试的时候有用exp只有在编译DLL时才会生成,记录DLL文件中的一些信息ncb无编译浏览文件,当自动完成功能出问题时可以删除此文件c头文件cpp原文rc资源文件rc2资源文件,用来将资源包含在项目中res编译后的二进制资源文件 一般而言,Visual C+中一个类由头文件和源文件两类文件支持。头

13、文件用于定义类,包含指明派生关系,声明成员变量及成员函数。源文件用于实现类,主要定义成员函数的实现代码和消息映射。 典型文件举例 利用MFC AppWizardexe向导生成一个应用程序,根据应用程序种类的不同,生成的文件也有所差异,下面将分类列举。1应用文件应用文件(1)应用程序类文件每个MFC应用程序都需要有一个应用程序类文件,它一般与项目文件同名,例如:在默认情况下,MyProject项目应用程序类头文件为MyProject.h;源文件的文件名为“MyProject.cpp”,它们主要声明及实现应用程序类CMyProjectApp。CMyProjectApp类主要负责完成应用程序的初始化

14、、程序的启动和程序运行结束时的清理工作。(2)资源文件在项目中,资源通过资源标识符加以区分,通常情况下,应用程序向导会把一个项目中所有资源的标识符放到Resource.h中。对资源ID的命名有一定规则,如表4-2所示。标识符前缀说明IDR_主菜单资源、工具栏资源和快捷键资源IDD_对话框资源IDC_控件和光标IDS_字符串IDP_提示信息对话框的字符串ID_菜单命令项典型文件举例 (3)标准包含文件应用程序向导会为每一个项目生成一个标准包含头文件StdAfx.h,该文件用于包含一般情况下要用到且不会被修改的头文件,如MFC声明文件afxwin.h、使用工具栏、状态栏文件afxext.h等。St

15、dAfx.h和StdAfx.cpp文件用来生成预编译文件。2单文档应用程序单文档应用程序/多文档应用程序多文档应用程序单文档应用程序和多文档应用程序框架都是由3个类组成的,它们是框架窗口类、文档类和视图类。(1)框架窗口类文件在默认情况下,框架窗口的头文件均为MainFrm.h;源文件均为MainFrm.cpp,这两个文件定义和实现了框架窗口类CMainFrame,这个类是MFC的CFrameWnd类的派生类,它主要负责创建标题栏、工具栏和状态栏。(2)文档类文件在默认情况下,文档类头文件都是项目名称+“Doc.h”组成;源文件都是项目名称+“Doc.cpp”组成。例如:MyProject项目

16、中文档类头文件为MyProjectDoc.h;源文件为MyProjectDoc.cpp。它们是定义和实现文档类CMyProjectDoc的。CMyProjectDoc类是MFC中CDocument类的派生类,它主要负责应用程序数据的保存和装载,实现文档的序列化功能。(3)视图类文件在默认情况下,视图类头文件都是项目名称+“View.h”组成;源文件都是项目名称+“View.cpp”组成。例如:MyProject项目中视图类头文件为MyProjectView.h;源文件为MyProjectView.cpp。它们是定义和实现视图类CMyProjectView的。CMyProjectView类是MF

17、C中CView类的派生类,它主要负责客户区文档数据的显示及如何进行人机交互。典型文件举例 3基于对话框应用程序基于对话框应用程序在默认情况下,对话框类头文件都是项目名称+“Dlg.h”组成;源文件都是项目名称+“Dlg.cpp”组成。例如:MyProject项目中对话框类头文件为MyProjectDlg.h;源文件为MyProjectDlgcpp。它们是定义和实现对话框类CMyProjectDlg的。CMyProjectDlg类是MFC中CDialog类的派生类。它可以完成一个对话框的创建、显示等工作。4.3 Class Wizard类向导nClass Wizard的功能nClass Wiza

18、rd的简单应用n为项目添加新类n手工添加消息处理函数Class Wizard的功能 ClassWizard(类向导)主要用来定制现有的类和建立新的类,如把消息映射到类的成员函数,把一个控件与类的成员变量对应起来。只 有 在 打 开 或 创 建 一 个 项 目 后 , View主 菜 单 才 会 出 现 ClassWizard菜 单 项 , 这 时 才 能 使 用ClassWizard(类向导)。一般通过快捷键激活ClassWizard。“MFC ClassWizard”对话框共有5个页面:Message Maps页面用来处理消息映射,为消息添加或删除处理函数,查看已被处理的消息并定位消息处理代

19、码;Member Variables页面用来给对话框类添加或删除成员变量,这些变量必须是和某些控件资源相关联的控件类型;Automation页面提供了对OLE自动化类的属性和方法的管理;ActiveX Events页面用于管理ActiveX类所支持的ActiveX事件;Class Info页面显示应用程序中所包含类的信息,如一个类的头文件、实现文件和基类信息。图4-8为“MFC ClassWizard”对话框。Class Wizard的简单应用 在编程时,经常使用的就是“MFC ClassWizard”对话框中的Message Maps页面和Member Variables页面。下面围绕着它们

20、简单介绍一下。1怎样为类添加一个消息响应函数怎样为类添加一个消息响应函数(1)首先,建立一个基于对话框的应用程序。(2)单击“View”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。 (3)确定当前“为Message Maps”页面,在“Object Ids”列表中选择需要添加消息响应函数的对象;在“Messages”列表中选择需要添加的消息,例如:本教材需要为对话框添加WM_INITDIALOG消息响应函数。就在“Object IDs”列表中选择“CMyProjectDlg”,在“Messages”列表中找到“WM_INITDIALOG”并双击该列表项,此

21、时,在“Member functions”列表中会出现“OnInitDialog”,如图4-9所示。Class Wizard的简单应用 2如何将一个控件与一个类的成员变量对应起来如何将一个控件与一个类的成员变量对应起来(1)首先,建立一个基于对话框的应用程序。(2)单击“View”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。(3)确定当前“为Member Variables”页面,在“Control Ids”列表中找到需要对应成员变量的控件ID,例如:本教材需要为“确定”按钮添加一个对应的变量m_ButOK,需要在Control Ids”列表中双击“确定”

22、按钮的资源ID“IDOK”,在弹出的“Add Member Variable”对话框中找到“Member Variable Name”文本框,在此文本框中输入“m_ButOK”,单击OK按钮完成添加操作。在函数名前有“W”标志的表示消息响应函数;有“V”标志的表示虚函数。为项目添加新类为项目添加新类的方法如下:(1)首先,建立一个基于对话框的应用程序。(2)单击“View”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。(3)单击右上角“Add Class”按钮,在弹出的菜单中选择“New”菜单项,弹出“New Class”对话框,如图4-10所示。为项目添加

23、新类(4)在“Name”文本框中添入“CNewClassName”,在“Base class”文本框中选择需要创建的类的基类,单击“OK”按钮,将类CNewClassName添加到项目中,在Workspace工作区中就可以对这个类进行编辑了,如图4-11所示。手工添加消息处理函数消息处理函数是VC+最常用到的函数之一,实际上,消息处理函数是通过在消息地图中声明来实现的。请看下边的例子。手工为对话框类MyProject添加消息DIY_NEWMESSAGE(自定义消息)的消息响应函数OnNewMessage。(1)首先,建立一个基于对话框的应用程序MyProject。(2)单击“View”/“Re

24、sourceSymbols”,弹出“ResourceSymbols”对话框。 (3)在“ResourceSymbols”对话框中单击“New”按钮,为类添加一个新标识“DIY_NEWMESSAGE”,如图4-12所示。(4)关闭“ResourceSymbols”对话框,在Workspace中找到类CMyProjectDlg,双击CMyProjectDlg节点下的任意一个成员函数标识,代码编辑器中显示MyProjectDlg.cpp文件内容。(5)在代码编辑器中找到下段代码:BEGIN_MESSAGE_MAP(CMyProjectDlg, CDialog)END_MESSAGE_MAP()这是消

25、息地图的声明。读者需要在这个消息地图中添加消息响应说明。BEGIN_MESSAGE_MAP(CMyProjectDlg, CDialog)ON_MESSAGE(DIY_NEWMESSAGE,OnNewMessage)END_MESSAGE_MAP()这句代码告诉编译器,当有DIY_NEWMESSAGE消息发生时,执行OnNewMessage成员函数。手工添加消息处理函数(6)在Workspace中选中类CMyProjectDlg的标识,单击鼠标右键,在弹出的快捷菜单中选择“Add Member Function”项,打开“Add Member Function”对话框。(7)在“Add Mem

26、ber Function”对话框中的“Function Type”文本框中添入函数的返回值;在“Function Declaration”文本框中添入“OnNewMessage”,单击“OK”按钮,将此函数添加到项目中,如图4-13所示。(8)这样,一个消息响应函数就做成了,当系统捕捉到“DIY_NEWMESSAGE”消息时,会自动执行OnNewMessage成员函数。4.4 程序调试n断点跟踪n调试窗口 程序调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。编写健壮的代码是程序员需要具备的能力,开发高品质的软件是程

27、序员的追求。然而,在实际开发过程中,错误的产生是不可避免的,由于程序员编写代码的疏忽经常会导致错误的产生,在开发程序时,应保证程序具有强大的错误处理能力。 断点跟踪 在调试程序时,经常在程序可能出现错误的地方设置一个断点。在调试状态下运行程序时,当程序执行到断点处,会产生中断,使用户有机会查看此时程序的运行状态。在Visual C+中设置断点非常简单,在代码编辑器中选择欲设置断点的代码行,按F9键即可设置一个断点。如果用户想要设置复杂的断点,可以按组合键打开断点窗口。断点窗口包含了3个选项卡,其中每个选项卡包含了一种设置断点的方法。断点窗口如图9.1所示。断点窗口中列出了当前工程中的所有断点,

28、用户可以单击“Remove”或“Remove All”按钮移除某个断点或所有断点。1设置条件断点设置条件断点在设计断点时,可能需要设置一个条件断点。所谓条件断点,是在变量或表达式符合断点条件时才产生中断,进入调试阶段。如图4-14所示。断点跟踪(1)编写一段代码,如下:int sum = 0;for ( int i = 0;i 10;i+) sum+= i;(2)按Ctrl+B组合键打开断点窗口,在“sum+= i”行处设置一个段点,如图4-15所示。断点跟踪 (3)单击“Conditon”按钮,打开断点条件窗口,在该窗口中设置断点条件,如图4-16所示。 (4)运行程序,执行代码,当变量i等

29、于2时将产生中断,如图4-17所示。 断点跟踪 2设置数据断点数据断点只能在Breakpoints对话框中设置。选择“Data”选项卡,就显示了设置数据断点的对话框。在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。一般情况下,这个表达式应该由运算符和全局变量构成。(1)定义一个全局变量,并编写一段代码,如下:void CDebugDlg:OnOK() int sum = 0; for ( i = 0;i 10;i+)/i为一个整型全局变量 sum+= i; (2)按Ctrl+B组合键打开断点窗口,选择“Data”选项卡,在编辑框中输入全局变量i,如图4-18所示。断点跟踪

30、(3)单击OK按钮保存设置。运行程序,当程序试图改变变量i的值时将产生中断,进入调试阶段,如图4-19所示。(4)单击“确定”按钮,程序将停留在“改变i值”的代码处,如图4-20所示。 断点跟踪3设置消息断点设置消息断点Visual C+也支持对Windows消息进行截获,有两种方式进行截获:窗口消息处理函数和特定消息中断。在“Breakpoints”对话框中选择“Messages”选项卡,就可以设置消息断点。如果采用窗口消息处理方式,那么每次消息被这个函数处理,断点就到达;如果采用特定消息中断方式,则每次指定的消息到达,程序就中断。(1)按组合键打开断点窗口,选择“Messages”选项卡,

31、如图4-21所示。(2)在上方的组合框中输入窗口过程“AfxWndProc”,在下方的组合框中输入产生中断的消息,例如“WM-LBVTTONOOWN”,如图4-22所示。断点跟踪(3)运行程序,当用户单击鼠标左键时将产生中断,如图4-23所示。 断点跟踪(4)单击“确定”按钮,程序将停留在AfxWndProc处,如图4-24所示。 4断点跟踪前面本教材介绍了设置断点的方法,下面介绍如何利用断点跟踪程序。(1)编写一段代码,并在代码处设置一个断点,如图4-25所示。 断点跟踪(2)运行程序,执行断点所在的函数,程序将停留在断点处,如图4-26所示。断点跟踪(3)按键执行当前行代码,指针将移动到下

32、一行代码,同时sum的值被设置为0,用户可以通过鼠标或调试窗口查看变量的值,如图4-27所示。 断点跟踪(4)按键连续执行代码,直到当前指针停留在“total = Add(10,2)”语句处,如图4-28所示。 断点跟踪(5)当前代码涉及一个函数调用(Add函数),如果用户按键,当前指针不会进入Add函数而继续向下执行;如果用户按键,当前指针会进入Add函数,在Add函数执行后重新返回被调用的函数处。按键进入Add函数,如图4-29所示。 断点跟踪调试窗口 1.1.Watch调试窗口调试窗口 Watch窗口主要用来查看变量或对象的信息。用户可以通过单击“View”/“Debug Windows

33、”/“Watch”菜单项或者按组合键打开Watch窗口,为了查看某个变量或对象的值,在程序处于中断时,用户可以利用鼠标将其拖动到Watch窗口中,这样,在Watch窗口中将显示变量或对象的详细信息,如图4-30所示。 2.2.CallStack窗口窗口 Call Stack窗口能够查看当前函数的调用信息。例如函数的参数信息,调用当前函数的参数等。CallStack窗口如图4-31所示。调试窗口 从图4-31中可以看出当前函数为Add,参数值分别为10、20,在InitInstance方法中调用了Add方法。当用户在Call Stack窗口中双击InitInstance方法时,代码编辑器将进入到

34、InitInstance方法,并显示在该方法何处调用了Add方法,如图4-32所示。 3 3MemoryMemory窗口窗口Memory窗口用于显示某个地址开始处的内存信息,默认地址为0x00000000。用户可以通过单击“View”/“Debug Windows”/“Memory”菜单项或者按组合键打开Memory窗口,如图4-33所示。 调试窗口 在调试程序时,使用Memory窗口查看某个对象或变量的地址信息及值信息。例如,将某个变量拖动到Memory窗口的列表中,在列表中将显示该变量的地址及变量的值,如图4-34所示。 4 4VariablesVariables窗口窗口Variables

35、窗口用于显示当前执行函数中上下文可见的变量信息,当代码执行一条语句后,该语句涉及的变量值在Variables窗口中会红色显示。用户可以通过单击“View”/“Debug Windows”/“Variables”菜单项或者按组合键打开Variables窗口,如图4-35所示。 调试窗口 5 5RegistersRegisters窗口窗口Registers窗口用于显示当前CPU寄存器的名字、数据和标志,同时,也能够显示浮动栈指针。在Registers窗口中,用户可以改变任何一寄存器的值和标记。用户可以通过单击“View”/“Debug Windows”/“Registers”菜单项或者按组合键打开

36、Registers窗口,如图4-36所示。在Registers窗口中,用户可以修改任意寄存器或一个地址的值。在代码中设置一个断点,如图4-37所示。按键进入Add函数内部,如图4-38所示。 调试窗口按键执行Add函数体,按“Alt+5”组合键打开Registers窗口,如图4-39所示。 在图1.30中修改EAX的值为“00000001”,然后在代码编辑窗口按键执行代码,如图4-40所示。 调试窗口从图4-40中,可以发现变量three的值为“1”,而不是“30”。因为通过修改EAX寄存器,导致Add函数的返回值发生了变化。6 6DisassemblyDisassembly窗口窗口反汇编窗口Disassembly用于显示编译器为源代码产生的汇编指令。用户可以通过单击“View”/“Debug Windows”/“Desassembly”菜单项或者按组合键打开Disassembly窗口,如图4-41所示。 图4-41显示的是程序在执行“Add”方法时,编译器将“Add”翻译成的汇编指令。从Disassembly窗口中可以发现,编译器在调用某个方法时,会产生大量的附加代码初始化参数堆栈,在方法执行结束后,会生成一些附加代码释放参数的堆栈。4.5 课后习题设置条件断点调试程序?设置数据断点调试程序?设置消息断点调试程序?

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号