创建应用程序框架.ppt

上传人:牧羊曲112 文档编号:6244570 上传时间:2023-10-09 格式:PPT 页数:46 大小:995KB
返回 下载 相关 举报
创建应用程序框架.ppt_第1页
第1页 / 共46页
创建应用程序框架.ppt_第2页
第2页 / 共46页
创建应用程序框架.ppt_第3页
第3页 / 共46页
创建应用程序框架.ppt_第4页
第4页 / 共46页
创建应用程序框架.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《创建应用程序框架.ppt》由会员分享,可在线阅读,更多相关《创建应用程序框架.ppt(46页珍藏版)》请在三一办公上搜索。

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 Server上创建一个扩展存储的

3、程序。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 Utility Project:创建自

4、定义编译规则的项目,该项目可以作为一些子项目的主项目,它不产生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)菜单栏“File”/“New”-New窗口-Proj

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

6、ep 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类主要负责完成应用程序的初始化、程序的启动和程序运行结束时的清理工作。(2)资源文件在项目中,资

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

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

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

11、p”组成。例如:MyProject项目中对话框类头文件为MyProjectDlg.h;源文件为MyProjectDlgcpp。它们是定义和实现对话框类CMyProjectDlg的。CMyProjectDlg类是MFC中CDialog类的派生类。它可以完成一个对话框的创建、显示等工作。,课件制作人:宋坤,4.3 Class Wizard类向导,Class Wizard的功能Class Wizard的简单应用为项目添加新类手工添加消息处理函数,课件制作人:宋坤,Class Wizard的功能,ClassWizard(类向导)主要用来定制现有的类和建立新的类,如把消息映射到类的成员函数,把一个控件与

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

13、ActiveX事件;Class Info页面显示应用程序中所包含类的信息,如一个类的头文件、实现文件和基类信息。图4-8为“MFC ClassWizard”对话框。,课件制作人:宋坤,Class Wizard的简单应用,在编程时,经常使用的就是“MFC ClassWizard”对话框中的Message Maps页面和Member Variables页面。下面围绕着它们简单介绍一下。1怎样为类添加一个消息响应函数(1)首先,建立一个基于对话框的应用程序。(2)单击“View”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。(3)确定当前“为Message Map

14、s”页面,在“Object Ids”列表中选择需要添加消息响应函数的对象;在“Messages”列表中选择需要添加的消息,例如:本教材需要为对话框添加WM_INITDIALOG消息响应函数。就在“Object IDs”列表中选择“CMyProjectDlg”,在“Messages”列表中找到“WM_INITDIALOG”并双击该列表项,此时,在“Member functions”列表中会出现“OnInitDialog”,如图4-9所示。,课件制作人:宋坤,Class Wizard的简单应用,2如何将一个控件与一个类的成员变量对应起来(1)首先,建立一个基于对话框的应用程序。(2)单击“View

15、”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。(3)确定当前“为Member Variables”页面,在“Control Ids”列表中找到需要对应成员变量的控件ID,例如:本教材需要为“确定”按钮添加一个对应的变量m_ButOK,需要在Control Ids”列表中双击“确定”按钮的资源ID“IDOK”,在弹出的“Add Member Variable”对话框中找到“Member Variable Name”文本框,在此文本框中输入“m_ButOK”,单击OK按钮完成添加操作。在函数名前有“W”标志的表示消息响应函数;有“V”标志的表示虚函数。,课件制

16、作人:宋坤,为项目添加新类,为项目添加新类的方法如下:(1)首先,建立一个基于对话框的应用程序。(2)单击“View”/“ClassWizard”菜单命令打开“MFC ClassWizard”对话框。(3)单击右上角“Add Class”按钮,在弹出的菜单中选择“New”菜单项,弹出“New Class”对话框,如图4-10所示。,课件制作人:宋坤,为项目添加新类,(4)在“Name”文本框中添入“CNewClassName”,在“Base class”文本框中选择需要创建的类的基类,单击“OK”按钮,将类CNewClassName添加到项目中,在Workspace工作区中就可以对这个类进行编

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

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

19、ND_MESSAGE_MAP()这句代码告诉编译器,当有DIY_NEWMESSAGE消息发生时,执行OnNewMessage成员函数。,课件制作人:宋坤,手工添加消息处理函数,(6)在Workspace中选中类CMyProjectDlg的标识,单击鼠标右键,在弹出的快捷菜单中选择“Add Member Function”项,打开“Add Member Function”对话框。(7)在“Add Member Function”对话框中的“Function Type”文本框中添入函数的返回值;在“Function Declaration”文本框中添入“OnNewMessage”,单击“OK”按钮

20、,将此函数添加到项目中,如图4-13所示。,(8)这样,一个消息响应函数就做成了,当系统捕捉到“DIY_NEWMESSAGE”消息时,会自动执行OnNewMessage成员函数。,课件制作人:宋坤,4.4 程序调试,断点跟踪调试窗口,课件制作人:宋坤,断点跟踪,F9键:设置断点。:打开断点窗口。1设置条件断点在设计断点时,可能需要设置一个条件断点。所谓条件断点,是在变量或表达式符合断点条件时才产生中断,进入调试阶段。如图4-14所示。,课件制作人:宋坤,断点跟踪,(1)编写一段代码,如下:int sum=0;for(int i=0;i 10;i+)sum+=i;(2)按Ctrl+B组合键打开断

21、点窗口,在“sum+=i”行处设置一个段点,如图4-15所示。,课件制作人:宋坤,断点跟踪,(3)单击“Conditon”按钮,打开断点条件窗口,在该窗口中设置断点条件,如图4-16所示。,(4)运行程序,执行代码,当变量i等于2时将产生中断,如图4-17所示。,课件制作人:宋坤,断点跟踪,2设置数据断点数据断点只能在Breakpoints对话框中设置。选择“Data”选项卡,就显示了设置数据断点的对话框。在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。一般情况下,这个表达式应该由运算符和全局变量构成。(1)定义一个全局变量,并编写一段代码,如下:void CDebugD

22、lg: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)单击“确定”按钮,程序将停留在“改变i值”的代码处,如图4-20所示。,课件制作人:宋坤,断点跟踪,3设置消息断点Visual C+也支持对Windows消息进行截获,有两种方式进行截获:窗口消息处理函数和特定消息中断。在“Breakpoi

23、nts”对话框中选择“Messages”选项卡,就可以设置消息断点。如果采用窗口消息处理方式,那么每次消息被这个函数处理,断点就到达;如果采用特定消息中断方式,则每次指定的消息到达,程序就中断。(1)按组合键打开断点窗口,选择“Messages”选项卡,如图4-21所示。,(2)在上方的组合框中输入窗口过程“AfxWndProc”,在下方的组合框中输入产生中断的消息,例如“WM-LBVTTONOOWN”,如图4-22所示。,课件制作人:宋坤,断点跟踪,(3)运行程序,当用户单击鼠标左键时将产生中断,如图4-23所示。,课件制作人:宋坤,断点跟踪,(4)单击“确定”按钮,程序将停留在AfxWnd

24、Proc处,如图4-24所示。,4断点跟踪前面本教材介绍了设置断点的方法,下面介绍如何利用断点跟踪程序。(1)编写一段代码,并在代码处设置一个断点,如图4-25所示。,课件制作人:宋坤,断点跟踪,(2)运行程序,执行断点所在的函数,程序将停留在断点处,如图4-26所示。,课件制作人:宋坤,断点跟踪,(3)按键执行当前行代码,指针将移动到下一行代码,同时sum的值被设置为0,用户可以通过鼠标或调试窗口查看变量的值,如图4-27所示。,课件制作人:宋坤,断点跟踪,(4)按键连续执行代码,直到当前指针停留在“total=Add(10,2)”语句处,如图4-28所示。,课件制作人:宋坤,断点跟踪,(5

25、)当前代码涉及一个函数调用(Add函数),如果用户按键,当前指针不会进入Add函数而继续向下执行;如果用户按键,当前指针会进入Add函数,在Add函数执行后重新返回被调用的函数处。按键进入Add函数,如图4-29所示。,课件制作人:宋坤,断点跟踪,课件制作人:宋坤,调试窗口,1.Watch调试窗口 Watch窗口主要用来查看变量或对象的信息。用户可以通过单击“View”/“Debug Windows”/“Watch”菜单项或者按组合键打开Watch窗口,为了查看某个变量或对象的值,在程序处于中断时,用户可以利用鼠标将其拖动到Watch窗口中,这样,在Watch窗口中将显示变量或对象的详细信息,

26、如图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 x0000000

27、0。用户可以通过单击“View”/“Debug Windows”/“Memory”菜单项或者按组合键打开Memory窗口,如图4-33所示。,课件制作人:宋坤,调试窗口,在调试程序时,使用Memory窗口查看某个对象或变量的地址信息及值信息。例如,将某个变量拖动到Memory窗口的列表中,在列表中将显示该变量的地址及变量的值,如图4-34所示。,4Variables窗口Variables窗口用于显示当前执行函数中上下文可见的变量信息,当代码执行一条语句后,该语句涉及的变量值在Variables窗口中会红色显示。用户可以通过单击“View”/“Debug Windows”/“Variables”

28、菜单项或者按组合键打开Variables窗口,如图4-35所示。,课件制作人:宋坤,调试窗口,5Registers窗口Registers窗口用于显示当前CPU寄存器的名字、数据和标志,同时,也能够显示浮动栈指针。在Registers窗口中,用户可以改变任何一寄存器的值和标记。用户可以通过单击“View”/“Debug Windows”/“Registers”菜单项或者按组合键打开Registers窗口,如图4-36所示。,在Registers窗口中,用户可以修改任意寄存器或一个地址的值。在代码中设置一个断点,如图4-37所示。按键进入Add函数内部,如图4-38所示。,课件制作人:宋坤,调试窗

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号