创建应用程序框架.ppt

上传人:wuy****n92 文档编号:91523381 上传时间:2023-05-27 格式:PPT 页数:46 大小:995KB
返回 下载 相关 举报
创建应用程序框架.ppt_第1页
第1页 / 共46页
创建应用程序框架.ppt_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《创建应用程序框架.ppt》由会员分享,可在线阅读,更多相关《创建应用程序框架.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第 4 章 创建应用程序框架【学习目标【学习目标】l l应用程序向导应用程序向导l l应用程序向导生成的文件应用程序向导生成的文件l lClassWizard类向导类向导l l程序调试程序调试课件制作人:宋坤【学习导航】【学习导航】课件制作人:宋坤本章目录n4.1 应用程序向导n4.2 应用程序向导生成的文件n4.3ClassWizard类向导 n4.4 程序调试n4.5 课后习题课件制作人:宋坤4.1 应用程序向导nVisual C+中的向导类型n使用应用程序向导课件制作人:宋坤Visual C+中的向导类型“File”/“New”菜单命令课件制作人:宋坤Visual C+中的向导类型Vis

2、ual C+集成开发环境中向导类型及生成的程序说明如下:lATLCOMAppWizard:创建包含ActiveX控件的ATL(ActiveTemplateLibrary)。lClusterResourceTypeWizard:创建能够在微软群服务器上模拟和管理的项目。lCustomAppWizard:以用户定制的模板向导创建项目。lDatebaseProject:创建数据库项目。lDevStudioAdd-inWizard:创建C+或汇编语言编写的类似于DeveloperStudio形式的 外接程序。lExtendedStoredProcWizard:在SQLServer上创建一个扩展存储的程

3、序。lISAPIExtensionWizard:利用ISAPI(InternetServerAPI)创建网页浏览程序。lMakefile:制作Makefile文件,订制自己项目的集成开发环境。lMFCAcitveXControlWizard:创建基于MFC的ActiveX控件。lMFCAppWizarddll:创建基于MFC的动态连接库。lMFCAppWizardexe:创建基于MFC的应用程序,这是最常使用的一个向导。lNewDatabaseWizard:在SQLServer上创建一个SQLServer数据库。lUtilityProject:创建自定义编译规则的项目,该项目可以作为一些子项目

4、的主项目,它不产生LIB、DLL或EXE文件。lWin32Application:创建Win32应用程序,可不使用MFC,采用SDK方式编程或C语言编程。lWin32Dynamic-LinkLibrary:创建Win32动态连接库,采用SDK方法。lWin32StaticLibrary:创建Win32静态连接库,采用SDK方法。、其中,最常使用的是MFC AppWizardexe,这也是本章讲述的重点。课件制作人:宋坤使用应用程序向导Windows下可视化应用程序框架:(1)菜单栏“File”/“New”-New窗口-Projects选项卡-MFC AppWizardexe项课件制作人:宋坤使

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

6、 AppWizard Step 4 of 4窗口课件制作人:宋坤使用应用程序向导(7)在MFC AppWizard Step 4 of 4窗口中确定类的名称及所在文件的名称,单击Finish按钮,打开New Project Information窗口。课件制作人:宋坤4.2 应用程序向导生成的文件n文件类型n典型文件举例课件制作人:宋坤文件类型扩展名描述opt工程中关于开发环境的参数选项文件clw类向导文件信息,是按INI文件格式存储的dsp工程文件dsw工作区文件,将项目的详细情况组合到Workspace工作区中aps资源辅助文件,二进制格式plg编译信息文件,存储错误或警告信息hpj帮助文

7、件bsc代码浏览文件,如果使用源代码浏览器,必须生成该文件map可执行文件的映像信息记录文件pch预编译文件,可以加快编译速度pdb记录了程序有关的一些数据和调试信息,在调试的时候有用exp只有在编译DLL时才会生成,记录DLL文件中的一些信息ncb无编译浏览文件,当自动完成功能出问题时可以删除此文件h头文件cpp源文件rc资源文件rc2资源文件,用来将资源包含在项目中res编译后的二进制资源文件 一般而言,Visual C+中一个类由头文件和源文件两类文件支持。头文件用于定义类,包含指明派生关系,声明成员变量及成员函数。源文件用于实现类,主要定义成员函数的实现代码和消息映射。课件制作人:宋坤

8、典型文件举例 利用MFC AppWizardexe向导生成一个应用程序,根据应用程序种类的不同,生成的文件也有所差异,下面将分类列举。1应用文件应用文件(1)应用程序类文件每个MFC应用程序都需要有一个应用程序类文件,它一般与项目文件同名,例如:在默认情况下,MyProject项目应用程序类头文件为MyProject.h;源文件的文件名为“MyProject.cpp”,它们主要声明及实现应用程序类CMyProjectApp。CMyProjectApp类主要负责完成应用程序的初始化、程序的启动和程序运行结束时的清理工作。(2)资源文件在项目中,资源通过资源标识符加以区分,通常情况下,应用程序向导

9、会把一个项目中所有资源的标识符放到Resource.h中。对资源ID的命名有一定规则,如表4-2所示。标识符前缀说明IDR_主菜单资源、工具栏资源和快捷键资源IDD_对话框资源IDC_控件和光标IDS_字符串IDP_提示信息对话框的字符串ID_菜单命令项课件制作人:宋坤典型文件举例 (3)标准包含文件应用程序向导会为每一个项目生成一个标准包含头文件StdAfx.h,该文件用于包含一般情况下要用到且不会被修改的头文件,如MFC声明文件afxwin.h、使用工具栏、状态栏文件afxext.h等。StdAfx.h和StdAfx.cpp文件用来生成预编译文件。2单文档应用程序单文档应用程序/多文档应用

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

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

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

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

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

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

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

17、弹出的“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所示。课件制作人:宋坤为项目添

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

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

20、AP()这是消息地图的声明。读者需要在这个消息地图中添加消息响应说明。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”对话

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

22、表达式符合断点条件时才产生中断,进入调试阶段。如图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等于2时将产生中断,如图4-17所示。课件制作人:宋坤断点跟踪 2设置数据断点数据断点只能在Breakpoints对话框中设置。选择“Data”选项卡,就显示了

23、设置数据断点的对话框。在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。一般情况下,这个表达式应该由运算符和全局变量构成。(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)单击“确定”按钮,程序将停留在“改

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

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

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

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

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

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

30、项或者按组合键打开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 6Disassemb

31、lyDisassembly窗口窗口反汇编窗口Disassembly用于显示编译器为源代码产生的汇编指令。用户可以通过单击“View”/“Debug Windows”/“Desassembly”菜单项或者按组合键打开Disassembly窗口,如图4-41所示。图4-41显示的是程序在执行“Add”方法时,编译器将“Add”翻译成的汇编指令。从Disassembly窗口中可以发现,编译器在调用某个方法时,会产生大量的附加代码初始化参数堆栈,在方法执行结束后,会生成一些附加代码释放参数的堆栈。课件制作人:宋坤4.5 课后习题设置条件断点调试程序?设置数据断点调试程序?设置消息断点调试程序?课件制作人:宋坤

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁