您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 实验8-MFC基本应用程序的建立
实验内容(1)在一个默认的单文档应用程序Ex_SDI中通过映射计时器消息实现这样的功能:无论在Ex_SDI应用循序窗口的客户区中单击左键或右键,都会弹出“消息”对话框,显示鼠标左键或右键的单击次数。Ex_SDI运行结果如图T8.1所示。(2)使用调试器对上述程序的流程和鼠标单击数进行调试。实验准备和说明(1)在学习完第3章内容之后进行本次实验。(2)构思本次上机所需要的程序。(3)调试为本书新增的内容,要学会掌握其调试过程。实验步骤1.创建工作文件夹打开计算机,在“D:\VisualC++程序\LiMing”文件夹中创建一个新的子文件夹“实验8”。2.创建单文档应用程序Ex_SDI创建单文档应用程序Ex_SDI的具体步骤如下:(1)启动VisualC++6.0。(2)选择“文件”→“新建”菜单命令,显示出“新建”对话框。从列表框中选中MFCAppWizard(exe)的项目类型项(3)在“工程”编辑框中输入应用程序项目名称Ex_SDI.,并将项目文件夹定位到“D:\VisualC++程序\LiMing\实验8”。(4)单击“确定”按钮,显示“应用程序向导”对话框。选中单个文档(SingleDocument,简称SDI)应用程序类型。单击“完成”按钮,系统将显示向导创建的信息,单击“确定”按钮将自动创建次应用程序。(5)编译运行。3.添加数据成员添加数据成员的具体步骤如下(1)展开项目工作区窗口ClassView中的所有类结点;(2)用鼠标右键单击CEx_SDIView类结点,从弹出的快捷菜单中选择“AddMemberVariable(添加成员变量)”,弹出如图T8.2所示的“AddMemberVariable”对话框。(3)在VariableType框中输入成员变量类型int,在variableName框中输入成员变量名m_nLButton。保留默认的访问方式(Access)为Public。单击“OK”按钮,这样,就会在CEx_SDIView中添加一个公有型成员变量m_nLButton,变量类型为int。(4)按相同的方法,在CEx_SDIView中添加一个公有型成员变量m_nRButton,变量类型为int;(5)在项目工作区窗口ClassView中,展开CEX_SDIView类结点的所有成员结点,双击构造函数CEx_SDEView()结点,在CEx_SDEIView类的构造函数中添加下列成员变量初始化代码:CEx_SDEView::CEx_SDEView(){m_nLButton=m_nRVutton;}4、添加信息映射添加消息映射的具体步骤如下。(1)按Ctrl+W快捷键打开“MFCClassWizard”对话框。(2)在Classname组合框中,将类名选定为CEx_SDIView.此时,ObjectIds和Messages列表内容会相应地改变。在ObjectIds列表框中选定CEx_SDIView,而在Messages列表中选定WM_LBUTTOMDOWN信息。(3)双击Messages列表中的WM_LBUTTOMDOWN消息或单击“AddFunction”按钮,都会在CEx_SDIView.类中添加该消息的映射函数OnLButtonDown,同时在Memberfunctions列表中显示这一消息映射函数和被映射的消息。映射WM_LBUTTOMDOWN消息的结果如图T8.3所示。(4)单击“EditCode”按钮后,ClassWizard对话框退出,并转向文档窗口,定位到OnLButtonDown函数源代码处,添加下列代码:voidCex_SDView::OnLButtonDown(UINTnFlags,Cpointpoint){//计数变量m_nLButton加1,然后启动计时器m_nLButton++;SetTimer(1,50,NULL);CView::OnLButtonDown(nFlags,Cpointpoint);}(5)按相同的方法为CEx_SDIView.类添加WM_LBUTTOMDOWN消息映射,并在映射函数中添加下列代码:voidCex_SDView::OnLButtonDown(UINTnFlags,Cpointpoint){//计数变量m_nLButton加1,然后启动计时器m_nLButton++;SetTimer(2,50,NULL);CView::OnLButtonDown(nFlags,Cpointpoint);}(6)按类似的方法为CEx_SDIView.类添加WM_TIMER消息映射,并在映射函数中添加下列代码voidCex_SDView::OnTimer(UINTnIDEvent){Cstringstr;//创建一个字符串类对象//通过判断nIDEvent的值来确定是单击鼠标左键还是右键if(nIDEvent==1)Str.Format(“你已单击鼠标左键%d次!”,m_Nlbutton);if(nIDEvent==2)Str.Format(“你已单击鼠标左键%d次!”,m_Nlbutton);if((nIDEvent==1)||(nIDEvent==2)){KillTimer(nIDEvent);//先要关闭计时器MessageBox(str,“报告”);}CView::OnTimer(nIDEvent);}(7)编译运行并测试,结果如图T8.31所示。5、设置断点在设置断点之前,首先要保证程序中没有语法错误。所谓断点,实际上是告诉调试器在何处暂时中断程序的运行,以便查看程序的状态以及浏览和修改变量的值等。(1)在项目工作区的ClassVIEW页面中,展开Cex_SDIView下的所有结点。(2)双击OnLButtonDown结点,会在文档窗口中打开并定位到该消息映射代码处,在代码行“m_nLButton++;”中单击鼠标.(3)用以下3种方式之一设置断点,会在代码行“m_nLButton++;”的最前面的窗口页边距上有一个深红色的实心圆快,如图T8.3所示①按快捷键F9。②在Build工具栏上单击按钮。③在需要设置(或清除)断点的位置上单击鼠标右键,在弹出的快捷菜单中选择“Insert/RemoveBreakpoint”命令。需要说明的是,若在断点所在的代码行中再使用上述的快捷方式进行操作,则相应地设置断点被清除。若此时使用快捷菜单方式进行操作时,菜单项中还包含“DisableBreakpoint”命令,选择此命令后,该断点被禁用,相应地断点标志由原来的红色的实心圆变成空心圆。6.控制程序运行控制程序运行的具体步骤如下:(1)选择”编译”(Build)菜单“开始调试”子菜单的“去(Go)”命令,或单击“编译微型条”中的**按扭,启动调试器。(2)程序运行后,在客户区单击鼠标左键,由于程序中该消息的映射函数中设置了断点处停顿下来。(3)这是可以看到有一个黄色的小箭头,它指向即将执行的代码。而且,原来的“编译”菜单会变成“Debug”(调试)菜单,如图T8.5所示。其中有4条命令StepInto、StepOver、StepOut和RuntoCursor是用于控制程序运行的,其含义是:1)StepOver的功能是运行当前箭头指向的代码(只运行一条代码)2)StepInto的功能是如果当前箭头所指向的代码是一个函数的调用,则用StepInto进入该函数进行单步执行。3)StepOut的功能是如果当前箭头所指向的代码是在某一函数内,用它使用程序运行至函数返回处。4)RuntoCursor的功能是使程序运行至光标所指的代码.执行StepInto、StepOver、StepOut和RuntoCursor命令,看看程序运行结果和流程是怎样的?(4)选择“Debug”(调试)菜单中的”StopDebugging”命令或直接按快捷键Shift+F5或单击“编译微型条”中的**按扭,启动调试器。(5)7.查看和修改变量的值为了更好地进行程序调试,调试,调试器还提供一系列的窗口,用于显示各种不同的调试信息。可借助“查看”菜单下的“调试窗口”子菜单访问它们。事实上,当启动调试器后,Visual++6.0的开发一环境会自动显示出Watch和Variables两个调试窗口,如图T8.6所示。除了上述窗口外,调式器还提供QuickWatchMemoryRegistersCallStack以及Disassembly等窗口。但对于变量的查看和修改来说,通常可以使用QuickWatchWatch和Variables这3个窗口。以下步骤使用这3个窗口来查看、修改m_nLBntton或m_nRButton值(1)启动调试器,程序运行后,单击鼠标左键,程序停顿下来。(2)如图T8.6所示,可以看到Variables窗口有3个页面:AutoLicals和This。Auto页面用于显示出当前语句和上一条语句使用的变量,它还显示使用StepOver和StepOut命令后函数的返回值。Locals页面用于显示出当前函数使用的局部变量。This页面用于显示出由This所指向的对象信息。Locals页面用于内均有“名称(Name)”和“值(value)”两个域,调试器自动填充它们。除了这些页面外,Variables窗口还有一个“上下文(Context)”框,从该框的下拉列表中可以选定当前CallStack的指令,以确定在页面中显示变量的范围。(3)在“调试(Debug)”工具栏上,单击*按扭或按快捷键F10,箭头指向了下一句代码”SeTiner(1,50,NULL);”。同时,Variablels窗口中的m_nButton值变成了1.实际上,若仅需要快速查看变量或表达式的值,则只需要将鼠标指针直接放在代码中该变量或表达式上,片刻后,系统会自动弹出一个窗口显示出该变量或表达式的值。(4)在Watch窗口中,单击左边“名称(Name)”域下的空框,输入m_nRButton,按Enter键,相应的值也会自动出现在“值(Value)”域中。同时,又在末尾处出现新的窗框。添加新的变量或表达式如图T8.7所示需要说明的是,Watch窗口中有4个页面:Watch1Watch2Watch3和Watch4,在每一个页面中有一系列的用户要查看的变量或表达式,用户可以将一组变量或表达式的值显示在同一个页面中。(5)选择“调试(Debug)”菜单……“QuickWatch”命令或快捷键Shift+F9或在“调试(Debug)”工具栏上单击按钮,将弹出如图T8.8所示的“QuickWatch”窗口。其中,“表达式”框可以让用户输入变量名或表达式,然后按Enter健或单击“重置”按钮,就可以在“当前值”列表中显示出相应的值。若要修改其值的大小,则可按Tab健或在列表项的“Value”域中双击该值,再输入新值按Enter键就可以了。单击“添加监视”按钮可将刚才输入的变量名或表达式及其值显示在“Watch”窗口中。从上述过程可以看出,调试一般按这样的步骤进行:修正语法错误—设置断点—启用调试器—控制程序进行—查看和修改变量的值。8.退出VisualC++6.09.写出实验报告结合实验内容、思考与练习,写出实验报告。思考与练习(1)若向一个类添加成员函数,则应如何进行?(2)在Ex_SDI中,若再在CMainFrame类添加WM_LBUTTOMDOWN消息映射,并在映射函数添加弹出“消息”对话框的代码,这样,就在CMainFrame类和CEx_SDIView中都有该消息的映射函数,测试一下,看看在CMainFrame类的这个消息映射函数会不会执行?为什么?用调试器调试其结果。
本文标题:实验8-MFC基本应用程序的建立
链接地址:https://www.777doc.com/doc-3570433 .html