子任务1:MFC应用程序概述课件

上传人:磨石 文档编号:243125650 上传时间:2024-09-16 格式:PPT 页数:74 大小:1.04MB
返回 下载 相关 举报
子任务1:MFC应用程序概述课件_第1页
第1页 / 共74页
子任务1:MFC应用程序概述课件_第2页
第2页 / 共74页
子任务1:MFC应用程序概述课件_第3页
第3页 / 共74页
点击查看更多>>
资源描述
Visual C+,程序设计与应用教程,2024/9/16,*,任务单元二 :,MFC,编程基础,子任务,1,:简单,MFC,应用程序设计,2.1,Windows,应用程序概述,2.2,MFC,应用程序框架,2.3,消息映射与消息处理,2.4,程序调试,2.5,应用实例,Visual C+,程序设计与应用教程,第,2,章,1,2.1,Windows,应用程序概述,Windows应用程序运行于Windows操作系统上,与DOS应用程序有着本质的区别。,所有的,Windows应用程序都是由,消息驱动,的,,消息处理是所有,Windows应用程序的核心。,2,2.1.1 窗口,窗口是用户界面中,最,重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是,用户与产生该窗口的应用程序之间的可视界面,。,3,窗口是由应用程序创建的一个用于,接收,用户输入和,显示,输出的矩形区域,。是系统管理应用程序的基本单位。,窗口由,“,非客户区,”,和,“,客户区,”,组成。,非客户区,由,系统,绘制,包括菜单、工具栏、最大化按钮等。,客户区,由,应用程序,绘制,用于输出数据和接受用户的输入。,当用户启动一个程序时,一个窗口就创建了。,用户每次,单击,窗口,应用程序就会作出,响应,,,关闭,一个窗口会使应用程序,结束,。,编写一个,Windows,应用程序,首先,应创建一个或多个窗口,,随后,应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行,数据处理与数据交换,的过程。,4,2.1.2 消息和事件,Windows是一个基于事件的消息驱动系统,Windows应用程序是按照“,事件消息处理,”非顺序的机制运行的。,所谓,消息,,就是用于,描述某个事件发生的信息,,而,事件,是,对于,Windows的某种操作,。,事件,是,因,,,消息,是,果,,事件,产生,消息,消息,对应,事件。,所谓,消息的处理,,其实质就是,事件的处理,。当有某个,事件,(如单击鼠标、键盘输入和执行菜单命令等),发生,时,,Windows会根据具体的事件,产生,对应的,消息,,并发送到指定应用程序的,消息队列,。应用程序从消息队列中,取出消息,,并根据不同的消息进行,不同的处理,。,5,初始化应用程序,初始化并创建,应用程序窗口,进入消息循环,并获取消息,是否是,WM_QUIT,消息,是否是应用程序,处理的消息,输入消息,系统消息,消息处理函数,开始,默认处理函数,结束,windows应用程序的执行过程,Y,N,N,Y,6,2.1.3 基本数据类型,Windows编程中常用的,基本数据类型,的,别名,。,7,8,2.1.4 句柄,句柄是Windows编程的基础,所谓,句柄,就是,Windows,使用的一种无重复整数,。,句柄,主要用来,标识应用程序中的一个对象,,如窗口、实例、菜单、内存、输出设备、控制或文件等。,WINDOWS应用程序,只能访问句柄,不能直接访问句柄所指的实际数据。,(1) 句柄是一个,4 字节,的整数,Windows 利用它,标识应用程序创建和使用的资源,,包括应用程序实例、窗口、菜单、控件、内存、外设、文件以及与图形相关的画笔、刷子等.,(2) 句柄是,Windows 内部表资源数据存储的内存索引值,Windows 利用它可以访问表中的信息。,通常,在程序中要访问某个资源时,需要提供该资源的句柄,因此,句柄可理解为是,内存的索引值,。,9,Windows常见的公用句柄类型如下表所示:,10,由于对应的,MFC类已对句柄进行了,封装,,大多数情况下不再需要访问句柄。,句柄是,消息,与,API函数,的参数,采用,MFC编写应用程序时,可以通过访问类的一个public的,成员变量,来得到某个对象的句柄。,11,2.2 MFC应用程序框架,下面通过一个实例介绍利用,MFC AppWizardexe创建应用程序框架的步骤。,2.2.1 创建MFC应用程序框架,12,【例2.1】编写一个SDI单文档应用程序Li2_1,程序运行后,通过消息框输出“这是一个单文档应用程序!”的提示信息。,(1) 选择File菜单下的New菜单项,系统弹出New对话框。,单击,输入,工程名,保存文件路径,默认,13,单文档,界面,(SDI)应用程序。应用程序运行时,只能打开,一,个文档。,多文档,界面,(MDI)应用程序。应用程序可以同时打开,多,个文档。,基于对话框,的应用程序。应用程序将显示一个简单的对话框来处理用户的输入,,(2) MFC AppWizard-Step 1对话框主要用于选择应用程序类型。AppWizard可以创建,3种,类型的应用程序框架。,语言种类,是否支持文档,/视图结构,14,(3)MFC AppWizard-Step 2 of 6对话框中主要用于选择应用程序所支持,数据库,方式。,不,包含任何数据库支持,包含,最低限度,的数据库支持,创建对应表的一个,数据库类,和一个,视图类,,不附加标准文件支持,创建对应表的一个数据库类和一个视图类,并,附加,标准文件支持,15,(4)在MFC AppWizard-Step 3 of 6对话框中选择,应用程序所支持的,复合文档,类型。,不,支持任何复合文档,应用程序作为复合文档容器,包含可以链接或嵌入的,ActiveX对象,应用程序仅仅可以创建能够嵌入到其他应用程序中的文档,但是不能作为一个单独运行的应用程序,应用程序可以单独运行,同时也可以作为一个对象嵌入到其他应用程序中,应用程序能够作为容器包含嵌入或链接的,ActiveX对象,同时也能够作为一个可以嵌入到其他程序中的对象,16,(5),在,MFC AppWizard-Step 4 of 6对话框中设置应用程序的,外观,特征。,添加,工具栏,自动生成,状态栏,添加,打印和打印预览,菜单项,在帮助菜单中自动,添加索引和使用帮助,菜单项,使应用程序的外观呈,三维,显示,消息应用程序接口,应用程序具有,TCP/IP通信功能,传统风格工具条,Internet Explorer风格工具条,17,(6),在,MFC AppWizard-Step 5 of 6对话框中设置应用程序的,风格,。,创建,标准,的,MFC应用程序,创建类似于,Windows资源管理器,风格的应用程序,在生成的程序框架的源文件中,加入注释,不加,入注释信息,使用,动态链接库,使用,静态链接库,18,(7) 在MFC AppWizard-Step 6 of 6对话框中,可以设置向导生成的,文件名,和,类名,。,设置类名,设置文件名,19,(8)打开项目工作区中的,ClassView,类视图,单击,CLi2_1View类,左边的“,+”展开视图类,双击打开,OnDraw(),函数,并添加代码。,void CLi2_1View:OnDraw(CDC* pDC),CLi2_1Doc* pDoc = GetDocument();,ASSERT_VALID(pDoc);,/ TODO: add draw code for native data here,MessageBox(这是一个单文档应用程序!,消息框,MB_ICONEXCLAMATION|MB_OKCANCEL);,20,(9) 选择Build菜单中的Build Li2_1.exe菜单项,对工程进行编译和链接,生成可执行文件。再选择Build菜单中的Execute Li2_1.exe菜单命令运行程序。,21,MFC应用程序框架结构类的继承关系:,2.2.2 MFC应用程序框架结构类,根类,命令相关类,应用程序类,窗口类,文档类,视图类,框架窗口类,线程基类,22,1.C,Object,类,CObject是MFC类库的,根类,,它几乎描述了所有,MFC类的一些公共特性,并且给所有由它派生出的类提供了3种重要特性,即:,串行化支持,、,运行时类信息支持,以及,诊断和调试支持,。,2.C,CmdTarget,类,命令类,CCmdTarget是,CObject的子类,,它是,MFC库中所有,具有消息映射属性的类,的公共基类。从,CCmdTarget派生的类能在程序运行时动态创建对象和处理命令消息。,23,3.CWinApp类,应用程序类CWinApp是CWinThread的子类,,封装了初始化、运行、终止应用程序的代码,。可以由此派生自己的应用类。4个,成员函数实现传统的应用程序,winMain(),的工作。,InitInstance,(),应用程序的初始化;创建文档模板、文档、视图与主,窗口;,Run,(),隐藏在基类中,发送应用程序的消息到窗口,保持应用程序的正常运行,,处理消息循环,;,OnIdle,():,无窗口消息需处理时,被窗口框架调用。,ExitInstance,():,退出程序是,被调用。,24,5.CFrameWnd类,CFrameWnd类是,CWnd类的派生类,。它是所有其他,框架窗口,类的,基类,,主要用来管理一个窗口。,CFrameWnd类的对象是一个,框架窗口,,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。,CFrameWnd类支持单文档界面,对于,多文档,界面,使用它的两个派生类,CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd类用于MDI的,主窗口,,,CMDIChildWnd类用于MDI的,子窗口,。,4.CWnd类,窗口类CWnd,提供了,MFC中所有窗口类的基本功能,。从,CWnd派生的类可以拥有自己的窗口,并对它进行控制。,25,6.CView类,视图类CView是CWnd类的子类。视图类及其派生类,用于管理框架窗口的客户区,。,7.CDocument类,文档类CDocument,负责装载和维护文档,。文档包括应用程序的,工作成果,或,环境设置数据,等,可以是程序需要保存的任何内容。,26,一个,MFC应用程序并不直接操作上述类,而是以上述类为基类,派生新的类,,从而构建,Windows应用程序的基本框架。,例如,应用程序Li2_1中的类与这些基类的派生关系:,8.CDocTemplate类,文档模板,类,定义了文档模板的基本功能,它是一个抽象类,不能直接使用,只能用其派生类。,27,练习,28,1.应用程序向导生成的文件,下面以例,2.1中创建的应用程序Li2_1为例,介绍MFC AppWizardexe向导所生成的各类文件及功能。,2.2.3 MFC应用程序分析,29,(1) 头文件与实现文件,MainFrm.h,和,MainFrm.cpp,:定义和实现,窗口框架类,CMainFrame。,CLi2_1Doc.h,和,CLi2_1Doc.cpp,:定义和实现,文档类,CLi2_1Doc。,CLi2_1View.h,和,CLi2_1View.cpp,:定义和实现,视图类,CLi2_1View。,CLi2_1.h,和,CLi2_1.cpp,:定义和实现,应用程序类,CLi2_1App。,Resource.h,:定义工程中所有,资源标识符,,给资源ID分配一个整数值。,StdAfx.h,和,StdAfx.cpp,:用于建立一个,预编译,的头文件CLi2_1.PCH和一个预定义的类型文件StdAfx.obj。,加速编译过程,一般不修改。,30,(2) 资源文件,Li2_1.rc,和,Li2_1.rc2,:,Li2_1.rc,文件是程序所使用的所有,Windows,资源,的列表。,Li2_1.ico,:应用程序的图标所使用的,图标,文件。,Li2_1Doc.ico,:应用程序的,文档图标,文件。文档图标一般显示在多文档程序界面上。,Toolbar.bmp,:工具栏按钮的,位图,文件。,31,(3) 项目工作区文件和工程文件,Li2_1.dsw,:保存当前,工作区,所包含的工程的信息。,Li2_1.dsp,:包含当前工程的设置、工程中的文件等信息。,32,(4) 其他文件,Li2_1.clw,:该文件是,类信息,文件。它保存了,ClassWizard,编辑现有类或增加新类时需使用的类信息,同时还保存了创建、编辑消息映射和成员函数所需的信息。,ReadMe.txt,:该文件是工程,自述,文件。主要介绍所创建文件的内容和功能,以及添加用户代码、更改使用语言的方法。,33,2.应用程序的运行机制,程序开始,初始化全局对象,theApp,CWinApp类构造函数,CHelloApp类构造函数,AfxWinMain(),函数,pApp- InitInstance(),调用,ProcessShellCommand()创建主框架窗口对象、视图对象、文档对象,创建主框架窗口和视图窗口并显示,CWinThread:Run(),WM_QUIT,消息循 环,结束,pApp- Run(),CHelloApp theApp,CWinApp *pApp=AfxGetApp();,WinMain,pApp-InitApplication();,ExitInstance(),34,2.应用程序的执行过程,启动,:,创建,应用程序,对象,theApp,、调用应用程序类的,构造函数,初始化对象,theApp,。,应用程序框架调用,MFC,提供的,AfxWinMain,( ),主函数,。,AfxWinMain,( ),主函数,首先通过调用全局函数,AfxGetApp,( ),来获取,theApp,的,指针,pApp,;,然后通过该,指针调用,theApp,的成员函数,InitInstance,( ),来初始化应用程序。,35,在应用程序的初始化过程中,同时还构造了,文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。,当,InitInstance,( ),函数执行完毕后,,WinMain,( ),函数将调用成员函数,Run( ),,进入,消息处理循环,;,函数,Run( ),收到,WM_QUIT,消息,。,MFC,首先调用,CWinApp,类的成员函数,ExitInstance,( ),;,然后调用静态对象的析构函数;,退出应用程序,将控制权交给操作系统。,36,分析例,2.1中的消息对话框,一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。Visual C+提供,三个消息对话框函数,,它们的原型为:,int,AfxMessageBox,(LPCTSTR lpText,UINT nType=MB_OK,UINT nIDHelp=0);,int,MessageBox,(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT nType);,int CWnd:,MessageBox,(LPCTSTR,lpText,LPCTSTR lpCaption=NULL,UINT nType= MB_OK);,只能用于控件、对话框、窗口等一些类中。,可以用在程序的任意地方,37,38,39,2.2.4,文档,/,视图结构,文档视图体系结构是,MFC应用程序框架结构的基石,它定义了,一种程序结构,,这种结构利用,文档,对象保存应用程序的数据,依靠,视图,对象控制视图显示数据,,文档与视图的关系,是,一对多,的关系,也就是说,文,档中的数据可以以不同的方式显示,。,40,41,2.3 消息映射与消息处理,Windows消息主要有3种类型:,标准,Windows消息、控件消息,和,命令消息,。,1,标准,Windows,消息,除,WM_COMMAND,以外,所有以,“,WM_”,为前缀的消息都是标准,Windows,消息,;,由,窗口类,或,视图类,处理,;,都,有默认,的处理函数,它们在,CWnd,类中进行了预定义,默认前缀,On,。如,:,afx_msg,void,OnChar,();,2.3.1 消息的类别及其描述,消息映射:把,消息处理函数,与其要处理的,消息,连起来,42,标准的,Windows消息又分为3类:,键盘消息、鼠标消息和窗口消息,。,(1)键盘消息,键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。,WM_KEYDOWN,、,WM_KEYUP,:,按下、释放,非系统键产生的消息。,WM_CHAR,:,输入,非系统字符时产生的消息。,如,:,afx_msg,void,OnChar(UINT,nChar,UINT,nRepCnt,UINT,nFlags,);,43,(2) 鼠标消息,鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息有以下几种。,WM_MOUSEMOVE,:鼠标,移动,时产生的消息。,WM_RBUTTONDOWN,:鼠标,右键,按下时产生的消息。,WM_LBUTTONDOWN,:鼠标,左键,按下时产生的消息。,WM_LBUTTONDBLCLICK,:鼠标,双击,时产生的消息。,如,:,afx_msg,void,OnLButtonDown(UINT,nFlags,CPoint,point);,44,(3) 窗口消息,窗口消息一般与,创建窗口、绘制窗口、移动窗口,和,销毁窗口,等动作有关。,在,MFC应用程序中,窗口消息是由,视图类、窗口类,及它们的,派生类,处理的。,常见的窗口消息:,WM_PAINT,:客户区有移动或显示事件、窗口大小改变事件等发送,WM_TIMER,:每当计时器被触发时发送,45,2.控件消息,控件消息是指,控件或其他,子窗口,向,父窗口,发送的,WM_COMMAND消息。,与其他标准的,Windows消息一样,,控件消息也应该在,视图类、窗口类,中进行处理。但是,如果用户单击按钮控件时,发出的控件通知消息,BN_CLICKED将作为命令消息来处理。,例如:用户向编辑框中的文本进行修改,编辑框将发送给,父窗口,一条含控件通知码的,WM_COMMAND消息。,46,3.命令消息,命令消息是由,菜单项、工具栏按钮、快捷键,等用户界面对象发出的,WM_COMMAND,消息。,命令消息与其他消息不同,,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。,47,2.3.2 MFC消息映射机制,MFC,采用,消息映射,来处理消息;,消息映射机制包括一组,消息映射宏,,用于把一个,Windows,消息,和,其消息处理函数,联系起来。,所有从,CCmdTarget,类,派生出来的类都能够拥有自己的消息映射。,与,MFC,消息映射机制有关的宏有以下,3,个:,DECLARE,_MESSAGE_MAP( ),BEGIN,_MESSAGE_MAP(MyClass,MybaseClass,),END,_MESSAGE_MAP( ),48,为了使用消息映射宏:,首先在类定义的,结尾,用,DECLARE_MESSAGE_MAP( ),宏来,声明,使用消息映射,,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。,然后在类的,实现,源文件中用,BEGIN_MESSAGE_MAP( ),和,END_MESSAGE_MAP( ),宏来,定义,消息映射,。,49,为了在一个处理消息的类中加入消息映射表,要在该类的类声明中,(,一般在头文件中,),添加下面的宏调用。,DECLEAR_MESSAGE_MAP( ),这条宏语句一般放,在类定义的最后,。,例如,有一个,CMyClass,类,并想给类加上消息映射,则必须先在类定义中加入,DECLEAR_MESSAGE_MAP( ),函数。,class CMyClass:public CObject,DECLEAR_MESSAGE_MAP(),1) 声明消息映射,50,MFC应用程序MESSAG_MAP消息映射的形式如下:,BEGIN_MESSAGE_MAP(MyClass, MybaseClass),/ AFX_MSG_MAP (MyClass) /ClassWizard维护消息映射宏的标记,ON_. /MFC预定义消息映射宏,ON_MESSAGE(message, memberFun)/用户自定义消息映射宏,/ AFX_MSG_MAP,END_MESSAGE_MAP(),其中,MyClass是拥有消息映射的,派生类名,,,MybaseClass 是其,基类名,。,51,2),实现消息映射,消息映射提供了与,C+,中的虚函数类似的功能,消息处理方法可以位于派生类层次的任何地方。,MFC,使用消息映射结构去搜索所有,派生类,,直到它找到给定的消息处理函数为止,在搜索过程中会沿着,MFC,类层次上溯至,CCmdTarget,类。,消息映射机制,是一种比虚函数更快捷更高效的方法。,实现类的消息映射时需要在类的,实现文件,(.cpp),中加上消息映射表,,如下面的程序片段。,BEGIN_MESSAGE_MAP(CMouseMoveView, CView),/AFX_MSG_MAP(CMouseMoveView),ON_WM_MOUSEMOVE(),/AFX_MSG_MAP,/,标准打印命令,ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint),ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint),ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview),END_MESSAGE_MAP(),52,【例2.2】 利用ClassWizard为例2.1中生成的应用程序Li2_1添加鼠标右键按下消息,即WM_RBUTTONDOWN消息,并为File菜单下的Open菜单项添加消息处理函数,分析ClassWizard类向导所进行的消息映射。P35,53,练习,54,2.3.3 自定义消息处理,自定义消息处理,:,定义消息名、分配,ID值及完成消息映射。,Windows将所有的消息值分为4段:,0x0000,0x03FF,段,:,用于,Windows,系统消息,0x0400,0x7FFF,段,:,用于用户,自定义的窗口消息,0x8000,0xBFFF,段,:,为,Windows,保留值,0xC000,0xFFFF,段,:,用于应用程序的,字符串消息,。,55,常量,WM_USER(,为,0x0400),与第一个自定义消息值相对应,用户必须为自己的消息定义相对于,WM_USER,的偏移值,利用,#define,语句直接定义自己的消息,如下所示:,#define WM_USER WM_USER+3,/,自定义消息,WM_USER,也可以调用窗口消息注册函数,RegisterWindowMessage( ),来定义一个,Windows,消息,由系统分配消息一个整数值。该函数原型为:,UINT RegisterWindowMessage(LPCTSTR lpString),;,其中参数,lpString,是要定义的消息名,调用成功后将返回该消息的,ID,值。,56,【,例,2.3】,编写一个自定义消息应用程序,并添加,WM_RBUTTONDOWN,消息。当程序运行时,用户在视图窗口中单击鼠标右键,则调用自定义消息处理函数,输出文本“自定义消息,WM_MYMESSAGE,的处理函数被调用!”。,P37,#define WM_MYMESSAGE WM_USER+1 /,自定义消息,afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);,ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)/,自定义消息映射宏,LRESULT CLi2_3View:OnMyMessage(WPARAM wParam,LPARAM lParam),MessageBox(,自定义消息,WM_MYMESSAGE,的处理函数被调用!,);,return 0;,SendMessage(WM_MYMESSAGE);,57,2.4 程序调试,程序调试分为源程序,语法错误的修改,和程序,逻辑设计错误的修改,两个阶段,,编译器,只能找出源程序的语法错误,程序的逻辑设计错误只能靠程序员利用,调试工具,来手工检查和修改。,58,2.4.1 查找源程序中的语法错误,语法错误分为,:,一般错误,(error):,出现该错误时将,不会,产生可执行程序,;,警告错误,(warning):,出现该错误时,能够,生成可执行程序,但程序运行时可能发生错误,严重的,warning,错误还会引起死机现象。,59,如果程序有语法错误,则在执行,编译、链接,命令时,,Visual C+编译器将在输出窗口中给出,语法错误,提示信息,但,链接错误,提示信息,不能给,出错误发生的具体位置。,在输出窗口中,双击,错误提示信息或按,F4,键可以返,回到源程序编辑窗口,,并通过一个箭头符号定位到产生错误的语句。,说明:编译器的错误提示可能不十分准确,一处错误可能引发多个错误提示。所以修改一个错误最好马上编译!,60,2.4.2 调试器,为了查找和修改程序中的逻辑设计错误,Visual C+ IDE提供了重要的调试工具Debug。,单击,Build | Start Debug,菜单中的,菜单项,,可以启动,Debug。,61,Start Debug子菜单中有Go、Step Into、,Run To Cursor及Attach to Process菜单项,开始或继续调试程序,到某个断点、程序的结束或需要用户输入的地方停止,程序执行到当前光标处,相当于在光标处临时,设置了一个断点,单步执行,程序的每一个指令,能进入被调用的函数内部,将调试器与一个正在运行的进程相连接,62,调试过程开始后,,Debug主菜单取代Build,主菜单出现在菜单栏中,同时出现一个可停靠的调试工具栏和一些调试窗口。,63,Auto,:,显示当前语句或前一语句中变,量的值或函数返回值,。,Locals,:,显示当前函数,局部,变量的名称、值与类型。,this,:,以树型方式显示当前类对象的所有,数据成员,。,Variable窗口,Watch窗口:观察与修改变量或表达式的值,64,即使源程序没有语法错误,但最后生成的可执行程序也没有像程序设计要求的那样运行,这类程序设计上的错误被称为,逻辑设计错误,或缺陷,(bug)。,跟踪调试程序是查找此类逻辑设计错误方法中,最常采用,的动态方法。,跟踪调试的基本原理,就是在程序运行过程的某一阶段观测程序的状态。而在一般情况下程序是连续运行的,所以我们必须使程序在某一点停下来。,2.4.3 跟踪调试程序,65,选择,Edit,菜单下的,Breakpoints,菜单项,显示,Breakpoints对话框。,1.设置断点,设置断点的,3种方式:,按位置:,无条件断点,按表达式的值,按窗口消息,66,2.控制程序运行,Step Over,:运行,当前箭头指向,的代码,(,只运行,一条代码,),。,Step Into,:如果当前箭头所指的代码是一个函数的调用,则用,Step Into,进入该函数并进行,单步,执行,。,Step Out,:如果当前箭头所指向的代码是在某一函数内部,用它,可使程序运行至函数,返回处,。,Run to Cursor,:,使程序运行至,光标,所指的代码处,。,67,3.观察数据变化,在调试过程中,可以通过,Watch,和,Variables,窗口查看当前变量的值。,F9:设置断点,F5:启动调试器,F10:单步跟踪执行,68,【例2.4】编写一个SDI单文档应用程序Li2_4,求210中偶数的和,并在视图中输出计算结果。P41,void CLi2_4View:OnDraw(CDC* pDC),CLi2_4Doc* pDoc = GetDocument();,ASSERT_VALID(pDoc);,/ TODO: add draw code for native data here,int num5=2,4,6,8,10;,int sum=0;,for(int i=0;iTextOut(0,0,2,10,中偶数的和是:,+strSum);/,/,输出结果,69,2.4.4MFC调试宏,P43:自学(了解),70,2.5 应用实例,编写一个单文档应用程序,Sy2,程序运行后,首先在视图窗口中输入文本,然后通过键盘上的光标键控制该文本向左、向右、向上和向下4个方向移动。P44,71,CSy2View:CSy2View(),x=50;,y=50;,m_string.Empty();,public:,int x,y;,CString m_string;,void CSy2View:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags),m_string+=nChar;,Invalidate();,CView:OnChar(nChar, nRepCnt, nFlags);,72,void CSy2View:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags),switch(nChar),case VK_LEFT:,x-;,break;,case VK_RIGHT:,x+;,break;,case VK_UP:,y-;,break;,case VK_DOWN:,y+;,Invalidate();,CView:OnKeyDown(nChar, nRepCnt, nFlags);,void CSy2View:OnDraw(CDC* pDC),CSy2Doc* pDoc = GetDocument();,ASSERT_VALID(pDoc);,pDC-TextOut(x,y,m_string);,73,练习,74,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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