VC++.docx
- 文档编号:25459976
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:47
- 大小:476.66KB
VC++.docx
《VC++.docx》由会员分享,可在线阅读,更多相关《VC++.docx(47页珍藏版)》请在冰豆网上搜索。
VC++
实验一熟悉VisualC++程序调试方法
一、实验目的
(1)熟悉VisualC++6.0开发环境;
(2)掌握在VisualC++6.0开发环境调试程序的方法。
二、实验内容
(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: "< } 调试要求: (1)在程序代码的main函数中设置断点,启动程序执行到断点处停止; (2)在函数narcissus调用处进入函数内部,跟踪函数执行的过程; (3)单步执行程序,观察各个变量值的变化情况; (4)单步执行若干步后,跳出函数体,回到main函数。 三、实验报告 (1)观察三种项目类型对应的程序特点,做出简要说明; Win32ConsoleApplication可以创建Win32控制台应用程序,Win32Application可以创建Win32应用程序,MFCAppWizard(exe)可以创建MFC可执行程序 (2)列出C++程序清单,以及程序的运行结果; (3)记录调试过程中变量值的变化情况; 变量 1 2 3 4 …… 154 Count 0 0 0 0 …… 1 x 100 101 102 103 …… 153 X1 1 1 1 1 …… 1 X2 0 0 0 0 …… 5 X20 0 1 2 3 …… 53 X3 0 1 2 3 …… 3 (4)在VisualC++6.0中如何进行程序的跟踪调试; F5Build|StartDebugging启动调试程序 F10Debug|StepOver执行一行语句 F11Debug|Stepinto进入函数体内部 Shift+Debug|StopDebugging停止调试 (5)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 班次试验熟悉了vc++6.0的开发环境,掌握了在VisualC++6.0开发环境调试程序的方法。 对Win32ConsoleApplication、Win32Application和MFCAppWizard(exe)项目类型程序的特点有了初步了解。 同时,掌握了程序的跟踪,调试,设置断点等基本的程序调试方法。 有些知识是以前学到的,现在有些不熟悉,告诫我们以后学过的知识要多加复习。 实验二熟悉Windows源程序基本结构 一、实验目的 (1)熟悉VisualC++6.0开发环境; (2)熟悉Windows系统事件驱动的运行机制; (3)熟悉Windows应用程序源程序基本结构; 二、实验内容 创建一个空白的Win32Application应用程序,建立相关文件,手工输入下列代码,实现一个Windows窗口程序。 #include"windows.h" LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam); intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst, LPSTRlpszCmdLine,intnCmdShow) { WNDCLASSws; HWNDhWnd; MSGmsg; ws.style=0; ws.lpfnWndProc=WndProc; ws.cbClsExtra=0; ws.cbWndExtra=0; ws.hInstance=hThisInst; ws.hIcon=LoadIcon(NULL,IDI_HAND); ws.hCursor=LoadCursor(NULL,IDC_CROSS); ws.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); ws.lpszMenuName=NULL; ws.lpszClassName="DemoClass"; if(! RegisterClass(&ws)) { return-1; } hWnd=CreateWindow("DemoClass","MyFirstWindowsProgram", WS_OVERLAPPEDWINDOW,100,200,640,480, NULL,NULL,hThisInst,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } returnmsg.wParam; } LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam) { switch(messgae) { caseWM_DESTROY: PostQuitMessage(0); break; default: returnDefWindowProc(hwnd,messgae,wParam,lParam); } return0; } 三、实验报告 (1)列出源程序清单,以及程序的运行结果; (2)总结Windows源程序的结构特点,说明各个主要程序段的作用; Windows源程序主要结构由WinMain和WinProc两个函数构成,其中WinMain是入口函数,函数名称和参数都是固定的,WndProc是窗口函数,其函数名称可由用户自行定义,但是参数是固定的。 WinMain函数的主要功能如下: ①注册窗口类; ②建立窗口及执行必要的初始化; ③进入消息循环,根据接收的消息调用相应的处理过程,当消息循环检索到WM_QUIT时终止程序运行。 窗口函数WndProc定义了应用程序对接收到的不同消息的响应,包含了对各种可能接收到的消息的处理过程。 WndProc函数由一个或多个switch语句组成,每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。 (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 本次实验熟悉了VisualC++6.0开发环境,Windows系统事件驱动的运行机制和Windows应用程序源程序基本结构。 知道了windows源程序主要结构由WinMain和WinProc两个函数构成。 还了解了windows消息循环的相关知识。 实验三Windows图形绘制编程实验 一、实验目的 (1)熟悉VisualC++6.0开发环境; (2)掌握Windows图形输出的方法; (3)理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。 二、实验内容 请编写程序,要求如下: (1)定义一支黄色画笔,绘制一条线段; (1)定义一支紫色画笔,绘制一条多段线; (3)定义一支红色画笔,绘制一个正方形,并用适当的画刷填充图形内部; (4)定义一支绿色画笔,绘制一个圆,并用适当的画刷填充图形内部; (5)定义一支蓝色画笔,绘制一个正六边形,并用适当的画刷填充图形内部。 三、实验报告 (1)列出图形绘制程序代码清单; #include"windows.h" #include LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam); intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst, LPSTRlpszCmdLine,intnCmdShow) { WNDCLASSws; HWNDhWnd; MSGmsg; ws.style=0; ws.lpfnWndProc=WndProc; ws.cbClsExtra=0; ws.cbWndExtra=0; ws.hInstance=hThisInst; ws.hIcon=LoadIcon(NULL,IDI_HAND); ws.hCursor=LoadCursor(NULL,IDC_CROSS); ws.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); ws.lpszMenuName=NULL; ws.lpszClassName="DemoClass"; if(! RegisterClass(&ws)) { return-1; } hWnd=CreateWindow("DemoClass","windows绘图编程", WS_OVERLAPPEDWINDOW,100,200,640,480, NULL,NULL,hThisInst,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } returnmsg.wParam; } LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam) { HDChDC; HBRUSHhBrush; PAINTSTRUCTps; HPENhPen; doubleadd=sqrt(3); POINTpt1[]={{100,70},{140,10},{280,50},{300,30}};//线段的位置 POINTpt2[]={{100,250},{150,250},{175,250+25*add},{150,250+50*add},{100,250+50*add},{75,250+25*add}};//多边形的位置 switch(messgae) { caseWM_PAINT: hDC=BeginPaint(hwnd,&ps); SetMapMode(hDC,MM_ANISOTROPIC); hPen=CreatePen(PS_SOLID,2,RGB(255,255,0));//此为绘制直线代码,RGB(nRed,nGreen,nBlue) SelectObject(hDC,hPen); MoveToEx(hDC,40,40,NULL);//40,40分别为新位置的逻辑坐标,NULL存放原画笔位置的POINT结构地址 LineTo(hDC,80,160); DeleteObject(hPen); hPen=CreatePen(PS_SOLID,2,RGB(255,0,255));//此为绘制多段线代码 SelectObject(hDC,hPen); Polyline(hDC,pt1,4);//pt1为指向包含各点坐标的POINT结构数组的指针,4为线段中转折点的个数 DeleteObject(hPen); hBrush=CreateSolidBrush(RGB(0,255,255));//此为绘制矩形代码 SelectObject(hDC,hBrush); hPen=CreatePen(PS_SOLID,2,RGB(255,0,0)); SelectObject(hDC,hPen); Rectangle(hDC,340,20,490,170);//((X1,Y1)和(X2,Y2)分别为矩形的左上角和右下角的逻辑坐标 DeleteObject(hPen); DeleteObject(hBrush); hBrush=CreateSolidBrush(RGB(255,0,0));//此为绘制圆代码 SelectObject(hDC,hBrush); hPen=CreatePen(PS_SOLID,2,RGB(0,255,0)); SelectObject(hDC,hPen); Ellipse(hDC,180,180,250,250); DeleteObject(hPen); DeleteObject(hBrush); hBrush=CreateSolidBrush(RGB(0,255,0));//此为绘制多边形代码 SelectObject(hDC,hBrush); hPen=CreatePen(PS_SOLID,2,RGB(0,0,255)); SelectObject(hDC,hPen); Polygon(hDC,pt2,6);//pt2为包含各点坐标的POINT数组的地址,6为多边形点的个数 DeleteObject(hBrush); DeleteObject(hPen); EndPaint(hwnd,&ps); break; caseWM_DESTROY: PostQuitMessage(0); return0; default: returnDefWindowProc(hwnd,messgae,wParam,lParam); } return0; } (2)总结在Windows程序中绘制图形的基本操作步骤; 1、获取设备环境 ①调用BeginPaint函数 应用程序响应WM_PAINT消息进行图形刷新时,主要通过调用BeginPaint函数获取设备环境 PAINTSTRUCTps; hdc=BeginPaint(hwnd,&ps);//ps为PAINTSTRUCT类型结构 由BeginPaint函数获取的设备环境要用EndPaint函数释放 voidEndPaint(HWNDhwnd,PAINTSTRUCT&ps) ②调用GetDC函数 如果绘图工作并非由WM_PAINT消息驱动,则调用GetDC函数获取设备环境。 hdc=GetDC(hwnd); 由GetDC函数获取的设备环境必须用ReleaseDC函数释放 voidReleaseDC(HWNDhwnd); 2、绘图工具与颜色 ①画笔的操作: 创建画笔,选入设备环境,删除画笔。 ②画刷的创建: 创建画刷,选入设备环境和删除。 ③颜色: RGB(nRed,nGreen,nBlue)。 3、常用绘图函数 ①设置画笔当前位置的函数 ②从当前位置向指定坐标点画直线的函数 ③从当前位置开始,依次用线段连接lpPoints中指定的各点 ④绘制椭圆弧线的函数 ⑤绘制饼图,并用当前画刷进行填充 ⑥绘制矩形,并用当前画刷进行填充 ⑦绘制圆角矩形,并用当前画刷填充 ⑧绘制椭圆,并用当前画刷填充 ⑨绘制多边形,并用当前画刷填充 (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 本次实验熟悉了VisualC++6.0开发环境,掌握了Windows图形输出的方法,理解了设备环境、画笔、画刷的概念,掌握了常用的绘图函数。 在将画笔或画刷选入设备环境用使用完后不要忘记删除。 实验中遇到了很多小的问题,比如说绘制六边形时是各坐标的选取。 最后在老师的指导和自己的努力下顺利的完成了实验。 实验四鼠标和键盘编程实验 一、实验目的 (1)掌握键盘和鼠标的消息传递机制; (2)掌握在Windows程序中处理键盘和鼠标消息的方法; (3)掌握在VisualC++的程序调试方法。 二、实验内容 请编写程序,要求如下: (1)在屏幕上绘制一个矩形,并将举行内部划分成4个矩形区域; (2)在矩形内移动鼠标时,在上面划分的4个区域中显示不同的光标,并在屏幕左上角显示光标坐标; (3)当用户按下SHIFT和CTRL键并移动鼠标时,显示一个消息框,提示用户按下的是哪个键。 三、实验报告 (1)列出消息处理程序代码清单; #include"windows.h" #include"stdio.h" LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam); intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst, LPSTRlpszCmdLine,intnCmdShow) { WNDCLASSws; HWNDhWnd; MSGmsg; ws.style=0; ws.lpfnWndProc=WndProc; ws.cbClsExtra=0; ws.cbWndExtra=0; ws.hInstance=hThisInst; ws.hIcon=LoadIcon(NULL,IDI_HAND); ws.hCursor=LoadCursor(NULL,IDC_CROSS); ws.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); ws.lpszMenuName=NULL; ws.lpszClassName="DemoClass"; if(! RegisterClass(&ws)) { return-1; } hWnd=CreateWindow("DemoClass","鼠标消息编程", WS_OVERLAPPEDWINDOW,100,200,640,480, NULL,NULL,hThisInst,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } returnmsg.wParam; } LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam) { PAINTSTRUCTps; HDChdc; HFONThF; HPENhpen; HCURSORhcursor; charstr[20]; staticintx,y; switch(messgae) { caseWM_MOUSEMOVE: x=LOWORD(lParam); y=HIWORD(lParam); hdc=GetDC(hwnd); sprintf(str,"%d,%d",x,y); TextOut(hdc,20,20,str,strlen(str)); if(x>=50&&x<=450&&y>=50&&y<=250) { if(x>=50&&x<=250&&y>=50&&y<=150) {hcursor=LoadCursor(NULL,IDC_CROSS);//十字光标 SetCursor(hcursor);} if(x>=250&&x<=450&&y>=50&&y<=150) {hcursor=LoadCursor(NULL,IDC_WAIT);//沙漏光标 SetCursor(hcursor);} if(x>=50&&x<=250&&y>=150&&y<=250) {hcursor=LoadCursor(NULL,IDC_SIZEALL);//十字箭头光头 SetCursor(hcursor);} if(x>=250&&x<=450&&y>=150&&y<=250) {hcursor=LoadCursor(NULL,IDC_UPARROW);//向上箭头光标 SetCursor(hcursor);}} else{hcursor=LoadCursor(NULL,IDC_ARROW);//箭头光标 SetCursor(hcursor);} ReleaseDC(hwnd,hdc); break; caseWM_PAINT: hdc=BeginPaint(hwnd,&ps); SetMapMode(hdc,MM_ANISOTROPIC); hF=(HFONT)GetStockObject(SYSTEM_FONT); hpen=(HPEN)GetStockObject(BLACK_PEN); SelectObject(hdc,hpen); Rectangle(hdc,50,50,450,250); MoveToEx(hdc,50,150,NULL); LineTo(hdc,450,150); MoveToEx(hdc,250,50,NULL); LineTo(hdc,250,250); EndPaint(hwnd,&ps); break; caseWM_KEYDOWN: switch(wParam) { caseVK_CONT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC