第4章 创建应用程序框架.ppt_第1页
第4章 创建应用程序框架.ppt_第2页
第4章 创建应用程序框架.ppt_第3页
第4章 创建应用程序框架.ppt_第4页
第4章 创建应用程序框架.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课件制作人:宋坤,第 4 章 创建应用程序框架,【学习目标】,l 应用程序向导 l 应用程序向导生成的文件 l ClassWizard类向导 l 程序调试,课件制作人:宋坤,【学习导航】,课件制作人:宋坤,本章目录,4.1 应用程序向导 4.2 应用程序向导生成的文件 4.3 ClassWizard类向导 4.4 程序调试 4.5 课后习题,课件制作人:宋坤,4.1 应用程序向导,Visual C+中的向导类型 使用应用程序向导,课件制作人:宋坤,Visual C+中的向导类型,“File”/“New”菜单命令,课件制作人:宋坤,Visual C+中的向导类型,Visual C+集成开发环境中

2、向导类型及生成的程序说明如下: l ATL COM AppWizard:创建包含ActiveX控件的ATL(Active Template Library)。 l Cluster Resource Type Wizard:创建能够在微软群服务器上模拟和管理的项目。 l Custom AppWizard:以用户定制的模板向导创建项目。 l Datebase Project:创建数据库项目。 lDevStudio Add-in Wizard:创建C+或汇编语言编写的类似于Developer Studio形式的 外接程序。 l Extended Stored Proc Wizard:在SQL Ser

3、ver上创建一个扩展存储的程序。 l ISAPI Extension Wizard:利用ISAPI(Internet Server API)创建网页浏览程序。 l Makefile:制作Makefile文件,订制自己项目的集成开发环境。 l MFC AcitveX Control Wizard:创建基于MFC的ActiveX控件。 l MFC AppWizarddll:创建基于MFC的动态连接库。 l MFC AppWizardexe:创建基于MFC的应用程序,这是最常使用的一个向导。 l New Database Wizard:在SQL Server上创建一个SQL Server数据库。 l

4、 Utility Project:创建自定义编译规则的项目,该项目可以作为一些子项目的主项目, 它不产生LIB、DLL或EXE文件。 l Win32 Application:创建Win32应用程序,可不使用MFC,采用SDK方式编程或 C语言编程。 l Win32 Dynamic-Link Library:创建Win32动态连接库,采用SDK方法。 l Win32 Static Library:创建Win32静态连接库,采用SDK方法。、 其中,最常使用的是MFC AppWizardexe,这也是本章讲述的重点。,课件制作人:宋坤,使用应用程序向导,Windows下可视化应用程序框架:(1)菜

5、单栏“File”/“New”-New窗口-Projects选项卡-MFC AppWizardexe项,课件制作人:宋坤,使用应用程序向导,(2)单击OK按钮,弹出MFC AppWizard - Step1窗口,lSingle document:一次只能打开一个文档编辑窗口。 lMultiple document:在应用程序中可同时打开多个文档。 lDialog based:在对话框基础上建立的程序。,课件制作人:宋坤,使用应用程序向导,(3)这里选择Dialog based单选项,单击Next按钮,打开MFC AppWizardStep 2 of 4窗口,课件制作人:宋坤,使用应用程序向导,(

6、5)单击Next按钮,打开MFC AppWizard Step 3 of 4窗口。,课件制作人:宋坤,使用应用程序向导,(6)单击Next按钮,打开MFC AppWizard Step 4 of 4 窗口,课件制作人:宋坤,使用应用程序向导,(7)在MFC AppWizard Step 4 of 4窗口中确定类的名称及所在文件的名称,单击Finish按钮,打开New Project Information窗口。,课件制作人:宋坤,4.2 应用程序向导生成的文件,文件类型 典型文件举例,课件制作人:宋坤,文件类型,一般而言,Visual C+中一个类由头文件和源文件两类文件支持。头文件用于定义类

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

8、化、程序的启动和程序运行结束时的清理工作。 (2)资源文件 在项目中,资源通过资源标识符加以区分,通常情况下,应用程序向导会把一个项目中所有资源的标识符放到Resource.h中。对资源ID的命名有一定规则,如表4-2所示。,课件制作人:宋坤,典型文件举例,(3)标准包含文件 应用程序向导会为每一个项目生成一个标准包含头文件StdAfx.h,该文件用于包含一般情况下要用到且不会被修改的头文件,如MFC声明文件afxwin.h、使用工具栏、状态栏文件afxext.h等。StdAfx.h和StdAfx.cpp文件用来生成预编译文件。 2单文档应用程序/多文档应用程序 单文档应用程序和多文档应用程序

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

10、CMyProjectDoc类是MFC中CDocument类的派生类,它主要负责应用程序数据的保存和装载,实现文档的序列化功能。 (3)视图类文件 在默认情况下,视图类头文件都是项目名称+“View.h”组成;源文件都是项目名称+“View.cpp”组成。例如:MyProject项目中视图类头文件为MyProjectView.h;源文件为MyProjectView.cpp。它们是定义和实现视图类CMyProjectView的。CMyProjectView类是MFC中CView类的派生类,它主要负责客户区文档数据的显示及如何进行人机交互。,课件制作人:宋坤,典型文件举例,3基于对话框应用程序 在默

11、认情况下,对话框类头文件都是项目名称+“Dlg.h”组成;源文件都是项目名称+“Dlg.cpp”组成。例如:MyProject项目中对话框类头文件为MyProjectDlg.h;源文件为MyProjectDlgcpp。它们是定义和实现对话框类CMyProjectDlg的。CMyProjectDlg类是MFC中CDialog类的派生类。它可以完成一个对话框的创建、显示等工作。,课件制作人:宋坤,4.3 Class Wizard类向导,Class Wizard的功能 Class Wizard的简单应用 为项目添加新类 手工添加消息处理函数,课件制作人:宋坤,Class Wizard的功能,Clas

12、sWizard(类向导)主要用来定制现有的类和建立新的类,如把消息映射到类的成员函数,把一个控件与类的成员变量对应起来。 只有在打开或创建一个项目后,View主菜单才会出现ClassWizard菜单项,这时才能使用ClassWizard(类向导)。一般通过快捷键激活ClassWizard。 “MFC ClassWizard”对话框共有5个页面:Message Maps页面用来处理消息映射,为消息添加或删除处理函数,查看已被处理的消息并定位消息处理代码;Member Variables页面用来给对话框类添加或删除成员变量,这些变量必须是和某些控件资源相关联的控件类型;Automation页面提供

13、了对OLE自动化类的属性和方法的管理;ActiveX Events页面用于管理ActiveX类所支持的ActiveX事件;Class Info页面显示应用程序中所包含类的信息,如一个类的头文件、实现文件和基类信息。图4-8为“MFC ClassWizard”对话框。,课件制作人:宋坤,Class Wizard的简单应用,在编程时,经常使用的就是“MFC ClassWizard”对话框中的Message Maps页面和Member Variables页面。下面围绕着它们简单介绍一下。 1怎样为类添加一个消息响应函数 (1)首先,建立一个基于对话框的应用程序。 (2)单击“View”/“Class

14、Wizard”菜单命令打开“MFC ClassWizard”对话框。 (3)确定当前“为Message Maps”页面,在“Object Ids”列表中选择需要添加消息响应函数的对象;在“Messages”列表中选择需要添加的消息,例如:本教材需要为对话框添加WM_INITDIALOG消息响应函数。就在“Object IDs”列表中选择“CMyProjectDlg”,在“Messages”列表中找到“WM_INITDIALOG”并双击该列表项,此时,在“Member functions”列表中会出现“OnInitDialog”,如图4-9所示。,课件制作人:宋坤,Class Wizard的简单

15、应用,2如何将一个控件与一个类的成员变量对应起来 (1)首先,建立一个基于对话框的应用程序。 (2)单击“View”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。 (3)确定当前“为Member Variables”页面,在“Control Ids”列表中找到需要对应成员变量的控件ID,例如:本教材需要为“确定”按钮添加一个对应的变量m_ButOK,需要在Control Ids”列表中双击“确定”按钮的资源ID“IDOK”,在弹出的“Add Member Variable”对话框中找到“Member Variable Name”文本框,在此文本框中输入“m_

16、ButOK”,单击OK按钮完成添加操作。 在函数名前有“W”标志的表示消息响应函数;有“V”标志的表示虚函数。,课件制作人:宋坤,为项目添加新类,为项目添加新类的方法如下: (1)首先,建立一个基于对话框的应用程序。 (2)单击“View”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。 (3)单击右上角“Add Class”按钮,在弹出的菜单中选择“New”菜单项,弹出“New Class”对话框,如图4-10所示。,课件制作人:宋坤,为项目添加新类,(4)在“Name”文本框中添入“CNewClassName”,在“Base class”文本框中选择需要创

17、建的类的基类,单击“OK”按钮,将类CNewClassName添加到项目中,在Workspace工作区中就可以对这个类进行编辑了,如图4-11所示。,课件制作人:宋坤,手工添加消息处理函数,消息处理函数是VC+最常用到的函数之一,实际上,消息处理函数是通过在消息地图中声明来实现的。 请看下边的例子。手工为对话框类MyProject添加消息DIY_NEWMESSAGE(自定义消息)的消息响应函数OnNewMessage。 (1)首先,建立一个基于对话框的应用程序MyProject。 (2)单击“View”/“ResourceSymbols”,弹出“ResourceSymbols”对话框。 (3)

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

19、SSAGE_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 Member Function”对话框中的“Fu

20、nction Type”文本框中添入函数的返回值;在“Function Declaration”文本框中添入“OnNewMessage”,单击“OK”按钮,将此函数添加到项目中,如图4-13所示。,(8)这样,一个消息响应函数就做成了,当系统捕捉到“DIY_NEWMESSAGE”消息时,会自动执行OnNewMessage成员函数。,课件制作人:宋坤,4.4 程序调试,断点跟踪 调试窗口,课件制作人:宋坤,断点跟踪,F9键:设置断点。 :打开断点窗口。 1设置条件断点 在设计断点时,可能需要设置一个条件断点。所谓条件断点,是在变量或表达式符合断点条件时才产生中断,进入调试阶段。如图4-14所示。

21、,课件制作人:宋坤,断点跟踪,(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等于2时将产生中断,如图4-17所示。,课件制作人:宋坤,断点跟踪,2设置数据断点 数据断点只能在Breakpoints对话框中设置。选择“Data”选项卡,就显示了设置数据断点的对话框。在

22、编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。一般情况下,这个表达式应该由运算符和全局变量构成。 (1)定义一个全局变量,并编写一段代码,如下: void CDebugDlg:OnOK() int sum = 0; for ( i = 0;i 10;i+)/i为一个整型全局变量 sum+= i; (2)按Ctrl+B组合键打开断点窗口,选择“Data”选项卡,在编辑框中输入全局变量i,如图4-18所示。,课件制作人:宋坤,断点跟踪,(3)单击OK按钮保存设置。运行程序,当程序试图改变变量i的值时将产生中断,进入调试阶段,如图4-19所示。 (4)单击“确定”按钮,程序将停

23、留在“改变i值”的代码处,如图4-20所示。,课件制作人:宋坤,断点跟踪,3设置消息断点 Visual C+也支持对Windows消息进行截获,有两种方式进行截获:窗口消息处理函数和特定消息中断。在“Breakpoints”对话框中选择“Messages”选项卡,就可以设置消息断点。如果采用窗口消息处理方式,那么每次消息被这个函数处理,断点就到达;如果采用特定消息中断方式,则每次指定的消息到达,程序就中断。 (1)按组合键打开断点窗口,选择“Messages”选项卡,如图4-21所示。,(2)在上方的组合框中输入窗口过程“AfxWndProc”,在下方的组合框中输入产生中断的消息,例如“WM-

24、LBVTTONOOWN”,如图4-22所示。,课件制作人:宋坤,断点跟踪,(3)运行程序,当用户单击鼠标左键时将产生中断,如图4-23所示。,课件制作人:宋坤,断点跟踪,(4)单击“确定”按钮,程序将停留在AfxWndProc处,如图4-24所示。,4断点跟踪 前面本教材介绍了设置断点的方法,下面介绍如何利用断点跟踪程序。 (1)编写一段代码,并在代码处设置一个断点,如图4-25所示。,课件制作人:宋坤,断点跟踪,(2)运行程序,执行断点所在的函数,程序将停留在断点处,如图4-26所示。,课件制作人:宋坤,断点跟踪,(3)按键执行当前行代码,指针将移动到下一行代码,同时sum的值被设置为0,用

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

26、/“Debug Windows”/“Watch”菜单项或者按组合键打开Watch窗口,为了查看某个变量或对象的值,在程序处于中断时,用户可以利用鼠标将其拖动到Watch窗口中,这样,在Watch窗口中将显示变量或对象的详细信息,如图4-30所示。,2. Call Stack窗口 Call Stack窗口能够查看当前函数的调用信息。例如函数的参数信息,调用当前函数的参数等。CallStack窗口如图4-31所示。,课件制作人:宋坤,调试窗口,从图4-31中可以看出当前函数为Add,参数值分别为10、20,在InitInstance方法中调用了Add方法。当用户在Call Stack窗口中双击InitInstance方法时,代码编辑器将进入到InitInstance方法,并显示在该方法何处调用了Add方法,如图4-32所示。,3Memory窗口 Memory窗口用于显示某个地址开始处的内存信息,默认地址为0 x00000000。用户可以通过单击“View”/“Debug Windows”/“Memory”菜单项或者按组合键打开Memory窗口,如图4-33所示。,课件制作人:宋坤,调试窗口,在调试程序时,使用Memory窗口查看某个对象或变量的地址信息及值信息。例如,将某个变量拖动到Memory窗口的列表中,在列表中将显示该变量的地址及变量的值,如图4-34所示。,4Variable

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论