实验内容与分析设计(1)在一个默认的单文档应用程序Ex_SDI中通过映射计时器消息实现这样的功能:无论在Ex_SDI应用程序窗口的客户区单击鼠标右键或者左键,都会弹出消息对话框,显示鼠标左键或者右键的单击次数。(2)使用调试器对上述程序的流程和鼠标单击次数进行调试。
实验步骤与调试过程
1.创建工作文件夹 2.创建单文档应用程序 Ex_SDI 3.添加公有整型成员变量 m_nLButton 和 m_nRButton 并在 CEx_SDIView 类的构造函数中添 加成员变量初始化代码:m_nLButton=m_nRButton=0; 4.添加消息映射: 打开 MFC ClassWizard 对话框,在 CEx_SDIView 类中选定 WM_LBUTTONDOWN 消息; 双击后产生响应函数 OnLButtonDown,在其中添加如下代码 M_nLButton++;SetTimer(1,50,NULL) ; 同样地添加 WM_RBUTTONDOWN 消息映射,并在映射中添加下列代码 m_nRButton++; SetTimer(2,50,NULL) ; 类似地添加 WM_TIMER 消息映射,并在映射函数中添加下列代码 CString str; //创建一个字符串类对象 //通过判断 nIDEvent 的值来确定是单击鼠标左键还是右键 if(nIDEvent==1) str.Format("你已经单击鼠标左键 %d 次!",m_nLButton); if(nIDEvent==2) str.Format("你已经单击鼠标右键 %d 次!",m_nRButton); if((nIDEvent==1)||(nIDEvent==2)) { KillTimer(nIDEvent); //先要关闭计数器 MessageBox(str,"报告"); } 编译运行并测试
5.设置断点 双击 OnLButton 结点,在代码行 m_nLButton++;中单击鼠标,用下列三种方式之一设 置断点: (1)按快捷键 F9(2)在 Build 工具栏上单击 (3)在需要设置断点的位置上单
击鼠标右键在快捷菜单中选择 Insert/Remove Breakpoint 命令,设置成功后会出现一个深红 色的实心圆,如: 6.控制程序运行 (1)编译->开始调试->go 启动调试器 (2)程序运行后,在客户区单击鼠标左键,由于程序中该消息的映射函数中设置了断 点,因此程序会在该断点处停下 (3)这时可以看到有一个黄色的小箭头,它指向即将执行的代码。而且原来的“编译” 菜单会变成“Debug” ,其中有四条命令是控制程序运行的,其含义是:
Step Over 的功能是运行当前箭头所指的代码。 Step Into 的功能是如果当前箭头所指的代码是一个函数调用, 则用 Step Into 进入该函数 进行单步执行 Step Out 的功能是如果当前箭头所指向的事在某一个函数内, 则它使程序运行至函数返 回处 Run To Cursor 的功能是使程序运行至光标所指的代码处 7.查看和修改变量的值 (1)启动调试器,程序运行后,单击鼠标左键,程序停顿下来。 (2)如图,可以看到 Variables 窗口有 3 个页面:Auto,Locals 和 This
(3)按 F10,执行下一步 SetTimer(1,50,NULL) ,nLBut
ton 值变为 1 (4)在 Watch 窗口中单击“name”域下的空框,输入 m_NRButton,相应的值会自动 出现在“值”中,同时末尾处又出现新的空框
(5)选择“QuickView”命令会弹出窗口,其中表达式框可以让用户输入变量名或表达 式,然后按 Enter 就可以在当前值中显示相应的值,单击添加监视按钮可以将刚才输入的变 量名或表达式及其值显示在“Watch”窗口中。 从上述过程看出, 调试一般按这样的步骤进行: 修正语法错误->设置断点 启用调试器 设置断点->启用调试器 从上述过程看出, 调试一般按这样的步骤进行: 修正语法错误 设置断点 ->控制程序运行 查看和修改变量的值。 控制程序运行->查看和修改变量的值 控制程序运行 查看和修改变量的值。
实验结果
无论在Ex_SDI应用程序窗口的客户区单击鼠标右键或者左键,都会弹出消息对话框,显示鼠标左键或者右键的单击次数。
实验内容与分析设计(1)在一个默认的单文档应用程序Ex_SDI中通过映射计时器消息实现这样的功能:无论在Ex_SDI应用程序窗口的客户区单击鼠标右键或者左键,都会弹出消息对话框,显示鼠标左键或者右键的单击次数。(2)使用调试器对上述程序的流程和鼠标单击次数进行调试。
疑难小结
MFC主要组成部分:类、宏和全局函数。
类是MFC中最主要的内容。MFC类是以层次结构方式组织起来的。MFC中的类分成两部分,除了一些辅助类,大多数的MFC类是直接或间接从根类CObject派生而来。
1、输入时大小写错误或者漏写分号、括号等问题,检查核对调试正确即可。
2、对操作流程不熟悉,不能尽快打开指定的窗口或工作区域,以后要勤加练习,熟悉其操作流程。
3、对键盘熟悉度不够,键入速度过慢,影响了上机效率,以后会多打多练。
主要算法和程序清单
CString str;
if(nIDEvent==1)
str.Format("ni yi dan ji shu biao zuo jian %d ci!",m_nLButton);
if(nIDEvent==2)
str.Format("ni yi dan ji shu biao you jian %d ci!",m_nRButton);
if((nIDEvent==1)||(nIDEvent==2))
{
KillTimer(nIDEvent);
MessageBox(str,"baogao");
}