VC实验指导书.docx
- 文档编号:30500100
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:21
- 大小:123.28KB
VC实验指导书.docx
《VC实验指导书.docx》由会员分享,可在线阅读,更多相关《VC实验指导书.docx(21页珍藏版)》请在冰豆网上搜索。
VC实验指导书
《VisualC++语言》实验指导书
侯春望主编
信息与控制工程学院自动化系
2014年9月
目录
实验一熟悉VisualStudio程序调试方法1
实验二熟悉MFC源程序基本结构4
实验三MFC消息映射编程实验7
实验四MFC图形绘制编程实验11
实验五MFC鼠标和键盘编程实验14
实验六MFC控件编程实验17
实验七MFC定时器编程实验18
实验八MFC菜单编程实验20
实验一熟悉VisualStudio程序调试方法
一、预备知识
1、工程文件类型
VisualStudio工程文件类型
项目类型
说明
MFCAppWizard(exe)
创建MFC可执行程序
MFCAppWizard(dll)
创建MFC动态链接库
Win32ConsoleApplication
创建Win32控制台应用程序
Win32Application
创建Win32应用程序
MFCActiveXControlWizard
创建ActiveX控件程序
2、程序调试
操作类型
功能键
对应菜单
含义
调试
Ctrl+F5
Build|Runexe
运行当前项目
F7
Build|Buildexe
建立可执行程序
F5
Build|StartDebugging
启动调试程序
F5
Debug|Go
继续运行
F11
Debug|Stepinto
进入函数体内部
Shift+F11
Debug|Stepout
从函数体内部运行出来
F10
Debug|StepOver
执行一行语句
F9
设置/清除断点
Ctrl+F10
Debug|Runtocursor
运行到光标所在位置
Shift+
Debug|QuickWatch
快速查看变量或表达式的值
Shift+
Debug|StopDebugging
停止调试
二、实验目的
(1)熟悉VisualStudio开发环境;
(2)掌握在VisualStudio开发环境调试程序的方法。
三、实验内容
(1)创建三个项目,项目类型分别为:
Win32ConsoleApplication、Win32Application和MFCAppWizard(exe),分别编译运行各个程序,观察各种项目类型程序的特点。
(2)创建一个Win32ConsoleApplication类型的项目,输入下面的代码,按照要求对代码进行调试。
说明:
下面的程序求100~1000以内的水仙花数,所谓水仙花数就是一个三位的整数,其个位数字、十位数字和百位数字的立方和等于该数本身的值,则这个数称为水仙花数。
#include"iostream.h"
#include"math.h"
voidnarcissus();//求水仙花数
voidmain()
{
narcissus();
}
voidnarcissus()
{
intx1;//百位数字
intx20;//十位数字+个位数字
intx2;//十位数字
intx3;//个位数字
intcount=0;//找到的水仙花数的总数
for(intx=100;x<1000;x++)
{
x1=x/100;
x20=x%100;
x2=x20/10;
x3=x20%10;
if(x1*x1*x1+x2*x2*x2+x3*x3*x3==x)
{
count++;
cout<<"Onenarcissusnumberfound:
"< } } cout<<"Thetotalnumberofnarcissusnumbersis: "< } 调试要求: ●在程序代码的main函数中设置断点,启动程序执行到断点处停止; ●在函数narcissus调用处进入函数内部,跟踪函数执行的过程; ●单步执行程序,观察各个变量值的变化情况; ●单步执行若干步后,跳出函数体,回到main函数。 四、实验报告 (1)观察三种项目类型对应的程序特点,做出简要说明; (2)列出C++程序清单,以及程序的运行结果; (3)记录调试过程中变量值的变化情况; (4)在VisualC++6.0中如何进行程序的跟踪调试; (5)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 实验二熟悉MFC源程序基本结构 一、预备知识 1、MFC源程序组成结构 MFC程序结构基于CWinApp和CFrameWnd两个MFC类。 CWinApp类实现WinMain函数的功能。 MFC将Windows应用程序从开始运行、消息传递到结束运行所需的各步骤均封装在CWinApp类中,CWinApp类表示MFC应用程序的应用对象。 用户需要声明CWinApp派生类为全局对象。 用户从CWinApp派生了一个应用程序类之后,需要重载InitInstance成员函数来创建应用程序的主窗口对象。 CFrameWnd对象提供应用程序主窗口的功能,在派生类中可以使用数据成员保存数据,使用成员函数处理消息和实现其他功能。 2、在VisualStudio中创建MFC项目的步骤 (1)新建项目,选择项目类型为Win32Application,选择创建空项目,并设置在静态链接库或者DLL中使用MFC。 (2)新建文件,建立Demo.h,Demo.cpp两个文件,并加入到项目中。 (3)基于CFrameWnd派生新类CDemoWnd,该类暂时不需要实现具体功能。 (4)基于CWinApp派生新类CDemoApp,重载InitInstance()函数创建CDemoWnd类的对象做为应用程序主窗口,并进行必要的初始化。 定义CDemoApp类的对象做为全局兑现。 (5)编译运行程序。 二、实验目的 (1)熟悉VisualStudio开发环境; (2)熟悉MFC源程序基本结构; 三、实验内容 创建一个空白的Win32Application应用程序,设置在静态链接库或者DLL中使用MFC,建立文件Demo.h和Demo.cpp并加入到项目中,按照下面规定的步骤手工输入代码,实现一个MFC应用程序。 1、在Demo.h中,基于CFrameWnd派生新类CDemoWnd。 #include"afxwin.h" classCDemoWnd: publicCFrameWnd { public: CDemoWnd(); ~CDemoWnd(); }; 2、在Demo.cpp中,实现CDemoWnd类的构造函数和析构函数。 #include"Demo.h" //构造函数 CDemoWnd: : CDemoWnd() { } //析构函数 CDemoWnd: : ~CDemoWnd() { } 3、在Demo.h中,基于CWinApp类派生新类CDemoApp,声明InitInstance()函数,并定义CDemoApp的对象theApp为全局对象。 classCDemoApp: publicCWinApp { public: BOOLInitInstance(); }; CDemoApptheApp; 4、在Demo.cpp中,重载CDemoApp类的InitInstance()函数,完成主窗口对象的创建和初始化。 BOOLCDemoApp: : InitInstance() { CDemoWnd*pMainWnd=newCDemoWnd(); pMainWnd->Create(NULL,"MFC演示程序"); pMainWnd->ShowWindow(m_nCmdShow); pMainWnd->UpdateWindow(); m_pMainWnd=pMainWnd; returnTRUE; } 5、编译并运行程序。 四、实验报告 (1)列出源程序清单,以及程序的运行结果; (2)总结Windows源程序的结构特点,说明各个主要程序段的作用; (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 实验三MFC消息映射编程实验 一、预备知识 1、消息映射 消息映射本质上就是一个数组,MFC使用消息映射建立消息和类的成员函数的对应关系。 消息映射数组中存储的信息 (1)所处理的消息; (2)消息应用的控件ID,或者ID范围; (3)消息所传递的参数; (4)消息所期望的返回值。 2、消息映射宏 下面介绍常用的两个消息映射宏: (1)ON_MESSAGE: 处理任意消息 语法规则: ON_MESSAGE(ID,func) LRESULTfunc(WPARAMwParam,LPARAMlParam); 举例: 映射鼠标左键按下消息 ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown) LRESULTOnLButtonDown(WPARAMwParam,LPARAMlParam); (2)ON_COMMAND: 处理WM_COMMAND消息 语法规则: ON_COMMAND(ID,func) voidfunc(); 举例: 映射菜单项命令消息 ON_COMMAND(ID_OPER_TEST,OnOperTest) voidOnOperTest(); 3、消息映射步骤 MFC中手工添加消息映射按照如下步骤进行: (1)在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息映射宏; BEGIN_MESSAGE_MAP(CDemoView,CView) ON_MESSAGE(WM_KEYDOWN,OnKeyDown) ON_COMMAND(ID_OPER_TEST,OnOperTest) END_MESSAGE_MAP() (2)在类声明中声明成员函数; (3)在类的实现部分实现成员函数。 二、实验目的 (1)熟悉VisualStudio开发环境; (2)掌握消息映射机制的基本原理和手工添加消息映射的方法; (3)熟练掌握在VisualStudio开发环境调试程序的方法。 三、实验内容 设计MFC应用程序,手工添加消息映射,实现下面的功能: (1)按下CTRL键,拖动鼠标绘制矩形; (2)按下SHIFT键,拖动鼠标绘制椭圆。 四、实验报告 (1)总结手工添加消息映射的基本步骤; (2)列出鼠标绘图功能的实现代码; (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 五、附录: MFC消息映射示例代码 先创建一个空白的Win32Application工程,项目属性中设置在静态链接库或者DLL中使用MFC,再创建文件Demo.h和Demo.cpp,输入下面的代码就可以创建一个MFC应用程序框架。 头文件Demo.h代码 #include classCDemoWnd: publicCDemoWnd { protected: LRESULTOnLButtonDown(WPARAMwParam,LPARAMlParam); LRESULTOnMouseMove(WPARAMwParam,LPARAMlParam); LRESULTOnLButtonUp(WPARAMwParam,LPARAMlParam); DECLARE_MESSAGE_MAP() }; classCDemoApp: publicCWinApp { public: BOOLInitInstance(); }; CDemoAppThisApp;//全局应用程序对象 源文件Demo.cpp代码 #include"Demo.h" BEGIN_MESSAGE_MAP(CDemoWnd,CFrameWnd) ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown) ON_MESSAGE(WM_MOUSEMOVE,OnMouseMove) ON_MESSAGE(WM_LBUTTONUP,OnLButtonUp) END_MESSAGE_MAP() LRESULTCDemoWnd: : OnLButtonDown(WPARAMwParam,LPARAMlParam) { returnTRUE; } LRESULTCDemoWnd: : OnMouseMove(WPARAMwParam,LPARAMlParam) { returnTRUE; } LRESULTCDemoWnd: : OnLButtonUp(WPARAMwParam,LPARAMlParam) { returnTRUE; } BOOLCDemoApp: : InitInstance() { CDemoWnd*pFrame=newCDemoWnd(); pFrame->Create(0,_T("消息映射实验程序")); pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd=pFrame; returnTRUE; } 实验四MFC图形绘制编程实验 一、预备知识 1、图形设备接口 图形设备接口(GraphicsDeviceInterface,GDI)负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字,是Windows系统的重要组成部分。 2、设备环境 设备描述表用来定义绘图规则,设备描述表即为设备环境的属性的集合,可以将设备描述表看成图形的“输出模板”。 应用程序每一次图形操作均参照设备描述表中的属性执行。 获取设备环境是应用程序输出图形的先决条件,常用的两个MFC类是CPaintDC和CClientDC。 (1)CPaintDC类 应用程序响应WM_PAINT消息进行图形刷新时,主要通过CPaintDC类对象获取设备环境。 示例代码: CPaintDCdc(this); (2)CClientDC 如果绘图工作并非由WM_PAINT消息驱动,则使用CClientDC类的对象获取设备环境。 示例代码: CClientDCdc(this); 3、绘图工具与颜色 (1)画笔编程示例代码 CPaintDCdc(this); CPenPen,*pOldPen; Pen.CreatePen(PS_SOLID,1,RGB(255,0,0)); pOldPen=dc.SelectObject(&Pen); … dc.SelectObject(pOldPen); (2)画刷编程示例代码 CPaintDCdc(this); CPenBrush,*pOldBrush; Brush.CreateSolidBrush(RGB(255,0,0)); pOldBrush=dc.SelectObject(&Brush); … dc.SelectObject(pOldBrush); (3)颜色 Windows使用宏RGB定义绘图的颜色,其形式为: COLORREFRGB(BYTEnRed,BYTEnGreen,BYTEnBlue) 4、常用绘图函数 (1)设置画笔当前位置的函数 CPointMoveTo(intx,inty); CPointMoveTo(POINTpoint); (2)从当前位置向指定坐标点画直线的函数 BOOLLineTo(intx,inty); BOOLLineTo(POINTpoint); (3)从当前位置开始,依次用线段连接lpPoints中指定的各点 BOOLPolyline(LPPOINTlpPoints,intnCount); 示例代码: CPaintDCdc(this); CPointpoint[3]; point[0]=CPoint(100,100); point[1]=CPoint(200,100); point[2]=CPoint(200,200); dc.Polyline(point,3); (4)绘制矩形,并用当前画刷进行填充 BOOLRectangle(intx1,inty1,intx2,inty2); BOOLRectangle(LPCRECTlpRect); (5)绘制椭圆,并用当前画刷填充; BOOLEllipse(intx1,inty1,intx2,inty2); BOOLEllipse(LPCRECTlpRect); (6)绘制多边形,并用当前画刷填充 BOOLPolygon(LPPOINTlpPoints,intnCount); 示例代码: CPaintDCdc(this); CPointpoint[3]; point[0]=CPoint(100,100); point[1]=CPoint(200,100); point[2]=CPoint(200,200); dc.Polygon(point,3); 二、实验目的 (1)熟悉VisualStudio开发环境; (2)掌握MFC消息映射的操作步骤; (3)掌握MFC图形输出的方法; (4)理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。 三、实验内容 请编写程序,要求如下: (1)定义一支黄色画笔,绘制一条线段; (1)定义一支紫色画笔,绘制一条多段线; (3)定义一支红色画笔,绘制一个正方形,并用适当的画刷填充图形内部; (4)定义一支绿色画笔,绘制一个圆,并用适当的画刷填充图形内部; (5)定义一支蓝色画笔,绘制一个正六边形,并用适当的画刷填充图形内部。 四、实验报告 (1)列出图形绘制程序代码清单; (2)总结在MFC程序中绘制图形的基本操作步骤; (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 实验五MFC鼠标和键盘编程实验 一、预备知识 1、键盘在应用程序中的应用 (1)键盘消息 按键消息: 按下或松开一个键时就产生了一按键消息。 字符消息: 一个按键的组合产生了一个可以显示的字符时,就产生了一个字符消息。 (2)按键消息的两个参数 wParam: 包含了识别按下的键的虚键码。 lParam(32位的变量): 重复计数位(0~15位)、OEM扫描码(16~23位)、扩展键标志(24位)、保留位(25~28位)、关联码(29位)、键的先前状态(位30)、转换状态(31位)。 (3)字符消息 系统字符消息: WM_SYSKEYDOWN和WM_SYSKEYUP按键消息只能产生系统消息。 非系统字符消息: WM_KEYDOWN和WM_KEYUP的按键消息只能产生非系统消息。 2、鼠标在应用程序中的应用 鼠标作为定位输入设备,通过鼠标单击、双击和拖动功能,用户可以很容易地操作基于Windows图形界面的应用程序。 Windows中通过光标来指示当前鼠标的位置,在Windows操作系统中预定义了几种光标,并在相关头文件中加以定义。 (1)鼠标消息 鼠标消息的长字参数lParam包含了鼠标位置(相当于窗口的左上角为原点的坐标值)。 低位包含鼠标位置的x坐标值,高位包含鼠标位置的y坐标。 字参数wParam包含了指示各种虚键状态的值 (2)对于鼠标消息的处理 监测Shift和Ctrl键 caseWM_LBUTTONDOWN: //按下鼠标左键 if((wParam&MK_CONTROL)&&(wParam&MK_SHIFT)) …//Shift和Ctrl键都被按下 break; caseWM_LBUTTONUP: //释放鼠标左键 … break;… 二、实验目的 (1)掌握在VisualStudio的程序调试方法。 (2)掌握MFC消息映射的操作步骤; (3)掌握在MFC程序中处理键盘和鼠标消息的方法; 三、实验内容 请编写程序,要求如下: (1)在屏幕上绘制一个矩形,并将举行内部划分成4个矩形区域; (2)在矩形内移动鼠标时,在上面划分的4个区域中显示不同的光标,并在屏幕左上角显示光标坐标; (3)当用户按下SHIFT和CTRL键时,显示一个消息框,提示用户按下的是哪个键。 四、实验报告 (1)列出消息处理程序代码清单; (2)总结鼠标消息、按键消息和字符消息的字参数和长字参数包含信息的意义以及处理方法; (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 实验六MFC控件编程实验 一、实验目的 (1)熟悉VisualStudio开发环境; (2)掌握类向导的使用方法,熟练使用类向导进行消息映射,添加类的数据成员; (3)掌握MFC环境下标准控件的使用方法。 二、实验内容 创建如图所示的基于对话框的应用程序,在图形显示区绘制一个矩形并用单色画刷填充矩形内部。 通过滚动条控件设置填充颜色,并在编辑框中显示颜色的RGB值,通过单选按钮可以设置矩形的边框线型,“显示图形”复选框可以控制是否显示矩形。 设置完成后,单击“显示”按钮在“图形显示区”显示新的绘图效果。 单击“退出”按钮退出程序。 三、实验报告 (1)列表说明各个控件的属性设置,列出控件功能的实现代码; (2)总结类向导的功能和使用方法; (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 实验七MFC定时器编程实验 一、预备知识 1、定时器消息 定时器时间到时,向窗口发送WM_TIMER消息,应用程序窗口通过处理该消息来对定时器事件进行处理,该消息的参数说明如下: WM_TIMER wTimerID=wParam;//定时器标识符 tmprc=(TIMERPROC*)lParam;//定时器回调函数的地址 其中,定时器回调函数在使用SetTimer启动定时器时指定,如果没有指定定时器回调函数则可直接通过消息映射处理WM_TIMER消息。 2、启动定时器 使用SetTimer函数创建一个定时器,并制定超时时间,然后启动定时器。 该函数说明如下: UINTSetTimer( UINTnIDEvent,//定时器标识符 UINTnElapse,//定时时间,单位是毫秒 void(CALLBACKEXPORT*lpfnTimer)//定时器回调函数地址 (HWND,UINT,UINT,DWORD) ); 示例代码: SetTimer(1,200,NULL); 3、销毁定时器 定时器在不使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 实验 指导书