页数:21页文件大小:42.0 KB来源: VisualC++ppt课件
本课件为《Visual C++语言》课程配套实验指导书,先给出实验目录,随后依次安排程序调试、C++类基本语法、Windows图形绘制、鼠标和键盘编程、定时器编程、MFC消息映射、MFC控件编程与MFC鼠标做图八个实验,每个实验均包含实验目的、实验内容、实验报告要求与预备知识,其中预备知识部分系统整理了工程类型、调试快捷键、设备环境、绘图函数与消息参数等编程要点。
《VisualC++语言》实验指导书年月
本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。
目录实验一Visual C++程序调试实验.................................................................................1实验二C++类基本语法实验...........................................................................................4实验三Windows图形绘制编程实验..............................................................................6实验四鼠标和键盘编程实验.......................................................................................12实验五定时器编程实验...............................................................................................15实验六MFC消息映射编程实验....................................................................................17实验七MFC控件编程实验............................................................................................18实验八MFC鼠标做图编程实验....................................................................................19
1实验一Visual C++程序调试实验适用专业:电子、电气一、实验目的(1)熟悉VisualC++6.0开发环境; (2)掌握在VisualC++6.0开发环境调试程序的方法。 二、实验内容(1)创建三个项目,项目类型分别为:Win32ConsoleApplication、Win32Application和MFCAppWizard(exe),分别编译运行各个程序,观察各种项目类型程序的特点。 (2)创建一个Win32ConsoleApplication类型的项目,输入下面的代码,按照要求对代码进行调试。 说明:下面的程序求100~1000以内的水仙花数,所谓水仙花数就是一个三位的整数,其个位数字、十位数字和百位数字的立方和等于该数本身的值,则这个数称为水仙花数。
#include"iostream.h"#include"math.h"voidnarcissus();narcissus(); } voidnarcissus(){ intx1;intx2; 第4页:实验一程序调试(二)
2intx3;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:"<<x<<endl; } } cout<<"Thetotalnumberofnarcissusnumbersis:"<<count<<endl; } 调试要求:在程序代码的main函数中设置断点,启动程序执行到断点处停止; 在函数narcissus调用处进入函数内部,跟踪函数执行的过程; 单步执行程序,观察各个变量值的变化情况; 单步执行若干步后,跳出函数体,回到main函数。三、实验报告(1)观察三种项目类型对应的程序特点,做出简要说明; (2)列出C++程序清单,以及程序的运行结果; (3)记录调试过程中变量值的变化情况; (4)在Visual C++ 6.0中如何进行程序的跟踪调试; (5)总结实验的心得体会,实验中遇到的困难以及解决的方法等。
工程类型与调试快捷键
| 说明 | 项目类型 |
|---|---|
| 创建MFC可执行程序 | MFC AppWizard(exe) |
| 创建MFC动态链接库 | MFC AppWizard(dll) |
| 创建Win32控制台应用程序 | Win32 Console Application |
| 创建Win32应用程序 | Win32 Application |
| 创建ActiveX控件程序 | MFC ActiveX ControlWizard |
| 创建ATL应用程序 | ATL COM AppWizard |
| 创建Win32动态链接库 | Win32 Dynamic-Link Library |
| 创建数据库工程文件 | Database Project |
| 创建Internet服务器或过滤器 | ISAPI Extension Wizard |
| 含义 | 对应菜单 | 功能键 |
|---|---|---|
| 运行当前项目 | Build → Run exe | Ctrl+F5 |
| 调试建立可执行程序 | Build → Build exe | F7 |
| 启动调试程序 | Build → Start Debugging | F5 |
| 继续运行 | Debug → Go | F5 |
| 进入函数体内部 | Debug → Step into | F11 |
| 从函数体内部运行出来 | Debug → Step out | Shift+F11 |
| 执行一行语句 | Debug → Step Over | F10 |
| 设置/清除断点 | — | F9 |
| 运行到光标所在位置 | Debug → Run to cursor | Ctrl+F10 |
| 快速查看变量或表达式的值 | Debug → QuickWatch | Shift+F9 |
| 停止调试 | Debug → Stop Debugging | Shift+F5 |
3四、预备知识1、工程文件类型VC6.0可以创建的工程文件类型说明项目类型创建MFC可执行程序MFCAppWizard(exe)创建MFC动态链接库MFCAppWizard(dll)创建Win32控制台应用程序Win32ConsoleApplication创建Win32应用程序Win32Application创建ActiveX控件程序MFCActiveXControlWizard创建ATL应用程序ATLCOMAppWizard创建Win32动态链接库Win32Dynamic-LinkLibrary创建数据库工程文件DatabaseProject创建Internet服务器或过滤器ISAPIExtensionWizard2、程序调试含义对应菜单功能键操作类型运行当前项目Build |RunexeCtrl+F5调试建立可执行程序Build |BuildexeF7启动调试程序Build|StartDebuggingF5继续运行Debug|GoF5进入函数体内部Debug|StepintoF11从函数体内部运行出来Debug|StepoutShift+F11执行一行语句Debug|StepOverF10设置/清除断点F9运行到光标所在位置Debug|RuntocursorCtrl+F10快速查看变量或表达式的值Debug|QuickWatchShift+停止调试Debug|StopDebuggingShift+
原文调试快捷键表中QuickWatch与Stop Debugging的功能键显示不全,表中按Visual C++ 6.0标准快捷键补全为Shift+F9与Shift+F5。
4实验二C++类基本语法实验适用专业:电子、电气一、实验目的(1)熟悉VisualC++6.0开发环境; (2)熟悉C++类设计的基本方法; (3)掌握C++类的几个重要成员函数的定义和使用方法; 二、实验内容创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。 其功能有修改姓名、显示数据信息。 要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。 其中数据成员为保护的,函数为公有的。 三、实验报告(1)列出C++程序清单,以及程序的运行结果; (2)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 四、预备知识4.1类的定义1、类的定义格式类是一种用户自定义的数据类型,它的一般定义格式如下:class< 类名>
{ private:<私有数据成员和成员函数>; protected:<保护数据成员和成员函数>; public:<公有数据成员和成员函数>; } ; <各个成员函数的实现>;52、定义类时应注意的事项1在类内不允许对所定义的数据成员进行初始化。 2类中的数据成员的类型可以是任意的,包括整型、浮点型、字符型、数组、指针和引用等。 也可以是对象,即另一个类的对象,可以作为该类的成员,但自身类的对象是不可以的。 3一般地,在类内先说明公有成员,它们是用户关心的,后面说明私有成员。 4一般将类定义的说明部分或者整个定义部分(包含实现部分)放在一个头文件中。 5在类的说明部分之后必须加分号“; ”。
4.2类的成员函数定义类的函数成员的格式如下:返回类型类名::成员函数名(参数说明){ 函数体} 类的成员函数对类的数据成员进行操作,成员函数的定义体可以在类的定义体中,也可以在类的定义体外。6实验三Windows图形绘制编程实验适用专业:自动化、测控、电子、电气一、实验目的(1)熟悉VisualC++6.0开发环境; (2)掌握Windows图形输出的方法; (3)理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。 二、实验内容请编写程序,要求如下:(1)定义一支红色画笔,绘制一个正方形; (2)用不同颜色的线条连接互不相邻的两个顶点; (3)用不同颜色的画刷填充用上述方法所形成的图形中的每一个区域。 三、实验报告(1)列出图形绘制程序代码清单; (2)总结在Windows程序中绘制图形的基本操作步骤; (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 四、预备知识图形设备接口(GraphicsDeviceInterface,GDI)负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字,是Windows系统的重要组成部分。 Windows利用GDI和Windows设备驱动程序(开发人员只要建立与输出设关联,让系统加载相应的设备驱动程序即可)支持与设备无关的图形。 4.1获取设备环境的方法获取设备环境是应用程序输出图形的先决条件,常用的两种方法是调用函数BeginPaint或GetDC1、调用BeginPaint函数应用程序响应WM_PAINT消息进行图形刷新时,主要通过调用BeginPaint函数获取设备环境PAINTSTRUCTps;
hdc=BeginPaint(hwnd,&ps); 第9页:实验三预备知识(二)
实验三预备知识(二)
BeginPaint函数与GetDC函数的区别 项目 GetDC函数 BeginPaint函数 使用环境 使用较为广泛 只用于图形刷新时获取设备环境 操作区域 获取设备环境后操作区域为整个用户区 获取设备环境后操作区域为无效区域 释放设备环境所用函数 由ReleaseDC函数释放 由EndPaint函数释放
由BeginPaint函数获取的设备环境要用EndPaint函数释放voidEndPaint(HWNDhwnd,PAINTSTRUCT&ps)2、调用GetDC函数如果绘图工作并非由WM_PAINT消息驱动,则调用GetDC函数获取设备环境。hdc=GetDC(hwnd);由GetDC函数获取的设备环境必须用ReleaseDC函数释放voidReleaseDC(HWNDhwnd);BeginPaint与GetDC的区别GetDc函数BeginPaint函数项目函数使用较为广泛只用于图形刷新时获取设备环境使用环境使用GetDC函数获取设备环境后,操作区域为整个用户区使用BeginPaint函数获取设备环境后,操作区域为无效区域操作区域由ReleaseDC函数释放由EndPaint函数释放释放设备环境所用函数74.2绘图工具与颜色1、画笔画笔的操作:创建画笔;将画笔选入设备环境;删除画笔。(1)画笔的创建使用画笔之前必须事先定义一个画笔句柄。形式如下:HPENhPen;然后调用函数GetStockObject获取Windows系统定义的四种画笔。例如获取画笔BLACK_PEN的形式如下:hPen=GetStockObject(BLACK_PEN);(2)创建新画笔,形式如下:hPen=CreatePen(intnPenStyle,intnWidth,//确定画笔样式//画笔宽度COLORREFrgbColor//画笔颜色);
第10页:画笔画刷预备知识
画笔画刷预备知识
Windows系统提供的画刷样式 画刷样式 说明 亮灰色画刷 LTGRAY_BRUSH 黑色画刷 BLACK_BRUSH 空画刷 NULL_BRUSH 深灰色画刷 DKGRAY_BRUSH 白色画刷 WHITE_BRUSH 灰色画刷 GRAY_BRUSH 虚画刷 HOLLOW_BRUSH
画刷阴影样式nHatchStyle可选项 阴影样式标识 说明 垂直相交的阴影线 HS_CROSS 45度从左上到右下 HS_BDIAGONAL 水平阴影线 HS_HORIZONTAL 45度叉线 HS_DIAGCROSS 垂直阴影线 HS_VERTICAL 45度从左下到右上 HS_FDIAGONAL
8创建画笔后,必须调用SelectObject函数将其选入设备环境。SelectObject(hdc,hPen);//hPen为所创建或获取的画笔句柄不再使用当前画笔时,需删除画笔,以免占内存DeleteObject(hP);2、画刷画刷的创建与应用与画笔很相似,操作画刷也包括创建、选入设备环境和删除。(1)画刷的创建使用画刷需事先定义一个画刷句柄,然后调用函数GetStockObject获取Windows系统提供的7种画刷。形式如下:HBRUSHhBrush;//hBrush为画刷句柄hBrush=(HBRUSH)GetStockObject(nBrushStyle)画刷样式下面是Windows系统提供的7种画刷:亮灰色画刷LTGRAY_BRUSH黑色画刷BLACK_BRUSH空画刷NULL_BRUSH深灰色画刷DKGRAY_BRUSH白色画刷WHITE_BRUSH灰色画刷GRAY_BRUSH虚画刷HOLLOW_BRUSH可调用函数CreateSolidBrush和CreateHatchBrush创建画刷,hBrush=CreateSolidBrush(rgbColor);hBrush=CreateHatchBrush(intnHatchStyle,COLORREFrgbColor);参数nHatchStyle的可选项如下:垂直相交的阴影线HS_CROSS45度从左上到右下HS_BDIAGONAL水平阴影线HS_HORIZONTAL45度叉线HS_DIAGCROSS垂直阴影线HS_VERTICAL45度从左下到右上HS_FDIAGONAL(2)选入设备环境创建画刷后,通过SelectObject(hdc,hBrush);将其选入设备环境(3)删除画刷不使用画刷时,可用DeleteObject(hBrush);删除画刷,释放内存
第11页:常用绘图函数(一)
- 颜色Windows使用宏RGB定义绘图的颜色,其形式为:RGB(nRed,nGreen,nBlue)4.3常用绘图函数1、设置画笔当前位置的函数BOOLMoveToEx(HDChdc,intX,intY,//X、Y分别为新位置的逻辑坐标LPPOINTlpPoint//存放原画笔位置的POINT结构地址)2、从当前位置向指定坐标点画直线的函数BOOLLineTo(HDChdc,intX,intY)//X和Y为线段的终点坐标3、从当前位置开始,依次用线段连接lpPoints中指定的各点BOOLPolyline(HDChdc,LPPOINTlpPoints,//指向包含各点坐标的POINT结构数组的指针intnCount//nCount为POINT数组中点的个数)4、绘制椭圆弧线的函数9
第12页:常用绘图函数(二)
BOOLArc(HDChdc,intX1,intY1,intX2,intY2,intX3,intY3,intX4,intY4//边框矩形左上角的逻辑坐标//边框矩形右下角的逻辑坐标//椭圆弧起始点坐标//椭圆弧终止点坐标)5、绘制饼图,并用当前画刷进行填充BOOLPie(HDChdc,intX1,intY1,intX2,intY2,intX3,intY3,intX4,intY4//边框矩形左上角的逻辑坐标//边框矩形右下角的逻辑坐标//椭圆弧起始经线的确定点坐标//椭圆弧终止经线的确定点坐标)6、绘制矩形,并用当前画刷进行填充BOOLRectangle(HDChdc,intX1,intY1,intX2,intY2)(X1,Y1)和(X2,Y2)分别为矩形的左上角和右下角的逻辑坐标7、绘制圆角矩形,并用当前画刷填充BOOLRoundRect(HDChdc,intX1,intY1,intX2,intY2,intnHeight, intnWidth)参数nHeight和nWidth分别为圆角的高度和宽度。 10
第13页:矩形类绘图函数
- 绘制椭圆,并用当前画刷填充BOOLEllipse(HDChdc,intX1,intY1,intX2,intY2)9、绘制多边形,并用当前画刷填充BOOLPolygon(HDChdc,LPPOINTlpPoints,intnCount)lpPoints为包含各点坐标的POINT数组的地址,nCount为多边形点的个数。
第14页:实验四鼠标键盘(一)
12实验四鼠标和键盘编程实验适用专业:自动化、测控、电子、电气一、实验目的
- 掌握键盘和鼠标的消息传递机制;
- 掌握在Windows程序中处理键盘和鼠标消息的方法;
- 掌握在VisualC++的程序调试方法。
二、实验内容请编写程序,要求如下:
- 在屏幕上绘制一个矩形,并分成4个区域;
- 在矩形内移动鼠标时,在4个区域中显示不同的光标,并在屏幕上打印光标坐标;
- 处理SHIFT和CTRL键消息,按下键时,显示一个消息框。
三、实验报告
- 列出消息处理程序代码清单;
- 总结实验的心得体会,实验中遇到的困难以及解决的方法等。
- 四
- 预备知识4.1键盘在应用程序中的应用1
- 键盘消息按键消息:按下或松开一个键时就产生了一按键消息
- 字符消息
- 一个按键的组合产生了一个可以显示的字符时,就产生了一个字符消息。
含义类型消息按下了非系统键消息非系统WM_KEYDOWN松开了非系统键消息非系统WM_KEYUP按下了系统键消息系统WM_SYSKEYDOWN松开了系统键消息系统WM_SYSKEYUP2、按键消息的两个参数wParam:包含了识别按下的键的虚键码。
- lParam(32位的变量)
- 重复计数位(0~15位)、OEM扫描码(16~23位)、
第15页:实验四预备知识(一)
实验四预备知识(一)
系统预定义光标对照表 光标属性描述 代表预定义光标的常量 箭头光标 IDC_ARROW 十字光标 IDC_CROSS I形文本光标 IDC_IBEAM 空图标 IDC_ICON 十字箭头光标 IDC_SIZEALL 带有指向东北方和西南方箭头的光标 IDC_SIZENESW 带有指向北方和南方箭头的光标 IDC_SIZENS 带有指向西北方和东南方箭头的光标 IDC_SIZENWSE 带有指向东方和西方箭头的光标 IDC_SIZEWE 垂直箭头光标 IDC_UPARROW 计时光标(也称沙漏光标) IDC_WAIT
13扩展键标志(24位)、保留位(25~28位)、关联码(29位)、键的先前状态(位30)、转换状态(31位)。在WinMain函数的消息循环中包含了TranslateMessage函数,其功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ASCII码后才能产生WM_CHAR消息。3、字符消息系统字符消息:WM_SYSKEYDOWN和WM_SYSKEYUP按键消息只能产生系统消息。非系统字符消息:WM_KEYDOWN和WM_KEYUP的按键消息只能产生非系统消息。含义类型消息非系统字符非系统WM_CHAR非系统死字符非系统WM_DEADCHAR系统字符系统WM_SYSCHAR系统死字符系统WM_SYSDEADCHAR4.2鼠标在应用程序中的应用鼠标作为定位输入设备,通过鼠标单击、双击和拖动功能,用户可以很容易地操作基于Windows图形界面的应用程序。Windows中通过光标来指示当前鼠标的位置,在Windows操作系统中预定义了几种光标,并在Windows.h头文件中加以定义。光标属性描述代表预定义光标的常量箭头光标IDC_ARROW十字光标IDC_CROSSI形文本光标IDC_IBEAM空图标IDC_ICON十字箭头光标IDC_SIZEALL带有指向东北方和西南方箭头的光标IDC_SIZENESW带有指向北方和南方箭头的光标IDC_SIZENS带有指向西北方和东南方箭头的光标IDC_SIZENWSE带有指向东方和西方箭头的光标ISC_SIZEWE垂直箭头光标IDC_UPARROW计时光标(也称沙漏光标)IDC_WAIT1、鼠标消息长字参数lParam包含了鼠标位置(相当于窗口的左上角为原点的坐标值)。低位包含鼠标位置的x坐标值高位包含鼠标位置的y坐标字参数wParam包含了指示各种虚键状态的值
第16页:实验四预备知识(二)
实验四预备知识(二)
鼠标消息字参数wParam取值对照表 含义 值 按下Ctrl键 MK_CONTROL 按下了鼠标左键 MK_LBUTTON 按下了鼠标中键 MK_MBUTTON 按下了鼠标右键 MK_RBUTTON 按下键盘上的Shift键 MK_SHIFT
14含义值按下键按上的Ctrl键MK_CONTROL按下了鼠标左键,等同与WM_LBUTTONDOWNMK_LBUTTON按下了鼠标中键,等同与WM_MBUTTONDOWNMK_MBUTTON按下了鼠标右键,等同与WM_RBUTTONDOWNMK_RBUTTON按下键盘上的Shift键MK_SHIFT对于鼠标消息的处理(1)不监测caseWM_LBUTTONDOWN:…break;caseWM_LBUTTONUP:break;//按下鼠标左键//释放鼠标左键(2)要对Shift和Ctrl键进行监测caseWM_LBUTTONDOWN://按下鼠标左键if((wParam&MK_CONTROL)&&(wParam&MK_SHIFT))…//Shift和Ctrl键都被按下break;caseWM_LBUTTONUP://释放鼠标左键…break;…2、鼠标双击Windows系统默认的时间间隔为0.5秒,也可以调用SetDoubleClickTime()重新设定间隔值,要使窗口函数能接收鼠标双击产生的消息在注册窗口类时必须具有CS_DBLCLKS属性,wndclass.style=CS_HEADRAW|CS_VERDRAW|CS_DBLCLKS;若窗口不包含上述属性的定义,即使进行了双击操作,该窗口也只能接收到两条WM_BUTTONDOWN消息或两条WM_BUTTONUP消息。
第17页:实验五定时器(一)
15实验五定时器编程实验适用专业:自动化、测控、电子、电气一、实验目的
- 熟悉VisualC++6.0开发环境;
- 掌握API编程模式中定时器的使用方法(3)熟练掌握在VisualC++ 6.0开发环境调试程序的方法。
- 二
- 实验内容设计一个窗口,在窗口中间位置绘制一个圆角矩形,并用交替用红
- 绿
- 蓝三种颜色的画笔填充矩形的内部,每次改变颜色的时间间隔为1.0秒
三、实验报告
- 列出定时器操作相关的程序清单;
- 总结实验的心得体会,实验中遇到的困难以及解决的方法等。
四、预备知识1.定时器消息定时器时间到时,向窗口发送WM_TIMER消息,应用程序窗口通过处理该消息来对定时器事件进行处理,该消息的参数说明如下:WM_TIMERwTimerID=wParam;
第18页:实验五定时器(二)
16TIMERPROClpTimerFunc//定时器回调函数地址);
4.3销毁定时器定时器在不使用时要使用KillTimer函数进行销毁,该函数说明如下:BOOLKillTimer(HWNDhWnd,UINTuIDEvent//创建定时器的窗口句柄//定时器标识符);
第19页:实验六消息映射
17实验六MFC消息映射编程实验适用专业:自动化、测控、电子、电气一、实验目的
- 熟悉VisualC++6.0开发环境;
- 掌握消息映射机制的基本原理和手工添加消息映射的方法;
- 熟练掌握在VisualC++ 6.0开发环境调试程序的方法。
二、实验内容设计MFC应用程序,手工添加消息映射,实现下面的功能:1按下CTRL键,拖动鼠标绘制矩形; 2按下SHIFT键,拖动鼠标绘制椭圆。
三、实验报告
- 总结手工添加消息映射的基本步骤;
- 列出鼠标绘图功能的实现代码;
- 总结实验的心得体会,实验中遇到的困难以及解决的方法等。
第20页:实验七控件编程
实验七MFC控件编程实验适用专业:自动化、测控、电子、电气一、实验目的
- 熟悉VisualC++6.0开发环境;
- 掌握MFC环境下标准控件的使用方法;
- 熟练掌握在VisualC++ 6.0开发环境调试程序的方法。
二、实验内容创建如图所示的应用程序,在“形状”列表框中选择要绘制的图形,在“笔颜色”下拉列表框中选择画笔的颜色,在“刷子颜色”下拉列表框中选择画刷的颜色,在“线型”组框中选择画笔的线型,在“填充类型”中选择画刷填充类型,单击“绘图”按钮在“绘图设置”编辑框中显示选择的绘图设置选项,单击“退出”按钮退出程序。
三、实验报告
- 列表说明各个控件的属性设置;
- 列出控件功能的实现代码;
- 总结实验的心得体会,实验中遇到的困难以及解决的方法等。
18
第21页:实验八鼠标做图
19实验八MFC鼠标做图编程实验适用专业:自动化、测控、电子、电气一、实验目的
- 熟悉VisualC++6.0开发环境;
- 掌握应用MFC类库编写鼠标绘图程序的方法;
- 掌握MFC环境中绘图函数的使用方法。
二、实验内容创建一个单文档应用程序,实现鼠标的绘图功能。
要求:
- 创建一个工具栏,有线段、矩形、椭圆三个按钮;
- 绘图前,选择工具栏上的按钮,确定图形的形状。
按下鼠标左键,开始绘图,结合鼠标的光标坐标值,来确定图形的形状和大小,并随着鼠标的移动在屏幕上实时绘制图形,放开鼠标左键,确定最后的图形,绘制在屏幕上。
三、实验报告
- 列表实现绘图功能的代码清单;
- 总结实验的心得体会,实验中遇到的困难以及解决的方法等。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}