1、可视化实验报告学生学号 0121010680227实验课成绩学 生 实 验 报 告 书实验课程名称可视化编程(VC)开 课 学 院计算机科学与技术学院指导教师姓名岑 丽学 生 姓 名汤东昌学生专业班级软件工程1002班2011-2012学年第2学期实验课程名称:_可视化编程(VC) 实验项目名称熟悉VC IDE,创建一个简单的VC界面实验成绩实 验 者汤东昌专业班级软件1002班组 别同 组 者实验日期 年 月 日一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等) 熟悉VC IDE,并用API创建一个基本窗口。第二部分:实验过程记录(可加页
2、)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)#includeLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);/窗口函数说明/-以下初始化窗口类-int WINAPI WinMain(HINSTANCE hInstance,/WinMain函数说明 HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) HWND hwnd; MSG Msg; WNDCLASS wndclass; char lpszClassName=窗口;/窗口类名 char lpszTitle=My_Wi
3、ndows;/窗口标题名 /窗口类的定义 wndclass.style=0;/窗口类型为默认类型 wndclass.lpfnWndProc=WndProc;/窗口处理函数为WndProc wndclass.cbClsExtra=0;/窗口类无扩展 wndclass.cbWndExtra=0;/窗口实例无扩展 wndclass.hInstance=hInstance;/当前实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); /窗口的最小化图标为默认图标 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); /
4、窗口采用箭头光标/ wndclass.hbrBackground=GetStockObject(DEFAULT_PALETTE); wndclass.hbrBackground=NULL; /窗口背景为白色 wndclass.lpszMenuName=NULL;/窗口中无菜单 wndclass.lpszClassName=lpszClassName; /窗口类名为窗口示例 /-以下进行窗口类的注册- if(!RegisterClass(&wndclass) /如果注册失败则发出警告声音 MessageBeep(0); return FALSE; /创建窗口 hwnd=CreateWindow(
5、lpszClassName,/窗口类名 lpszTitle,/窗口实例的标题名 WS_OVERLAPPEDWINDOW,/窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT, /窗口左上角坐标为默认值 CW_USEDEFAULT, CW_USEDEFAULT, /窗口的高和宽为默认值 NULL, /此窗口无父窗口 NULL, /此窗口无主菜单 hInstance,/创建此窗口的应用程序的当前句柄 NULL);/不使用该值 /显示窗口 ShowWindow(hwnd,nCmdShow); /绘制用户区 UpdateWindow(hwnd); /消息循环 while(GetMes
6、sage(&Msg,NULL,0,0) TranslateMessage(&Msg); DispatchMessage(&Msg); return Msg.wParam;/消息循环结束即程序终止时将信息返回系统/窗口函数LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch(message) case WM_DESTROY: PostQuitMessage(0);/调用PostQuitMessage发出WM_QUIT消息 default: return DefWindowPro
7、c(hwnd,message,wParam,lParam); return(0);第三部分 结果与讨论(可加页)一、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)二、小结、建议及体会实验结果分析:如图所示为运行结果。实验时需要注意窗口类的初始化,进行窗口类的注册,然后再创建窗口。程序开头需要先进行窗口函数说明。小结、建议及体会:通过此次实验,我更好的认识和了解了API并且掌握了API一些基础知识实验课程名称:_可视化编程(VC) 实验项目名称基于API编程(一)实验成绩实 验 者汤东昌专业班级软件1002班组 别同 组 者实验日期 年 月 日一部分:实验预习报告(包
8、括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等) 在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红、绿和蓝,叶片外侧有一个外接圆。第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)#include#include#include#define pi 3.1415926LRESULT CALLBACK WinProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );int nNum=0,nMaxNum=20; /nMaxNum 绘图次数,nNum 当前位置
9、int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstace, LPSTR lpCmdLine, int nCmdShow ) char lpszClassName=窗口; char lpszTitle=4_8; /设计一个窗口类 WNDCLASS wndcls; wndcls.cbWndExtra=0; wndcls.cbClsExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndcls.hCursor=LoadCursor(NULL,IDC
10、_ARROW); wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinProc; wndcls.lpszClassName=lpszClassName; wndcls.lpszMenuName=NULL; wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(& wndcls); /创建窗口,定义一个变量用来保存成功创建的窗口后返回的句柄 HWND hwnd; hwnd=CreateWindow(lpszCl
11、assName, lpszTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 600, 450, NULL, NULL, hInstance, NULL); /显示及刷新窗口 ShowWindow(hwnd ,SW_SHOWNORMAL); UpdateWindow(hwnd); /定义消息结构体,开始消息循环 MSG msg; while(GetMessage(&msg ,NULL,0,0) TranslateMessage(&msg); DispatchMessage(&msg); return msg.wParam; /编写窗口过程函数LRESUL
12、T CALLBACK WinProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) HBRUSH hBrush; HPEN hPen; char lpszTitle=My_windows; int i,x,y; /x,y分别作为圆心的坐标 double fAngle; switch(uMsg) case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd ,&ps); SetMapMode(hDC,MM_ANISOTROPIC); SetWindowExtEx(hDC,400
13、,300,NULL); /设置窗口逻辑单位 ,所谓逻辑单位,即在比例一致情况下选择足够大的区域 SetViewportExtEx(hDC,600,450,NULL); SetViewportOrgEx(hDC,300,200,NULL); hPen=(HPEN)GetStockObject(RGB(10,100,20); /画外圆 SelectObject(hDC,hPen); Ellipse(hDC,-100,-100,100,100); hBrush=CreateSolidBrush(RGB(255,0,0); SelectObject(hDC,hBrush); fAngle=2*pi/n
14、MaxNum*nNum; /设置初始角度,1/20*pi、 2/20*pi、3/20*pi、 x=(int)(50*cos(fAngle); /初始圆心位置坐标 R (x,y) y=(int)(50*sin(fAngle); Pie(hDC,x-50,y-50,x+50,y+50, (int)(x+50*cos(fAngle),(int)(y+50*sin(fAngle), (int)(x+50*cos(fAngle+pi),(int)(y+50*sin(fAngle+pi) ); hBrush=CreateSolidBrush(RGB(0,255,0); SelectObject(hDC,h
15、Brush); fAngle=2*pi/nMaxNum*nNum; /设置初始角度,1/20*pi、 2/20*pi、3/20*pi、 x=(int)(50*cos(fAngle+2*pi/3); /初始圆心位置坐标 R (x,y) y=(int)(50*sin(fAngle+2*pi/3); Pie(hDC,x-50,y-50,x+50,y+50, /易知 (int)(x+50*cos(fAngle+2*pi/3), (int)(y+50*sin(fAngle+2*pi/3), (int)(x+50*cos(fAngle+pi+2*pi/3), (int)(y+50*sin(fAngle+p
16、i+2*pi/3); hBrush=CreateSolidBrush(RGB(0,0,255); SelectObject(hDC,hBrush); fAngle=2*pi/nMaxNum*nNum; x=(int)(50*cos(fAngle+4*pi/3); y=(int)(50*sin(fAngle+4*pi/3); Pie(hDC,x-50,y-50,x+50,y+50, /同理 (int)(x+50*cos(fAngle+4*pi/3), (int)(y+50*sin(fAngle+4*pi/3), (int)(x+50*cos(fAngle+pi+4*pi/3), (int)(y+
17、50*sin(fAngle+pi+4*pi/3) ); nNum+; Sleep(100); InvalidateRect(hwnd,NULL,1); /刷新客户区 EndPaint(hwnd,&ps); DeleteObject(hBrush); DeleteObject(hPen); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); 第三部分 结果与讨论(可加页)一、实验结果分析(包括数据处理、实验现象分析、影响因素
18、讨论、综合分析和结论等)二、小结、建议及体会实验结果分析:实验结果如图所示。实验中需要先对窗口进行编写,然后绘图,风车旋转既对窗口进行不断刷新。小结、建议及体会:通过本次实验了解windows的图形设备接口和windows绘图,掌握windows应用程序中有关图形的编程技术及其应用。实验课程名称:_可视化编程(VC) 实验项目名称基于API编程(二)实验成绩实 验 者汤东昌专业班级软件1002班组 别同 组 者实验日期 年 月 日一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等) 设计一个键盘程序,当按ctrl键时,表明要画椭圆;当按shi
19、ft键时,表明要画矩形。然后单击向右箭头键,椭圆或矩形的长度加10;单击向下箭头时,椭圆或矩形的高度加10;单击home键时,整个圆形或矩形向左移动;单击end键时,整个圆形或矩形向右移动;单击up键时,整个圆形或矩形向上移动;单击pagedown键时,整个圆形或矩形向下移动。第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)#include #include LRESULT CALLBACK WndProc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wP
20、aram, / first message parameter LPARAM lParam / second message parameter);int l=0;int r=0;int x=0;int p=0,q=0;int u=0;int d=0;int WINAPI WinMain( HINSTANCE hInstance, / handle to current instance HINSTANCE hPrevInstance, / handle to previous instance LPSTR lpCmdLine, / command line int nCmdShow ) WN
21、DCLASS wndcls; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WndProc;/ wndcls.lpszClassName=WHUT; wndcls.lpszMenuName=
22、NULL; wndcls.style=CS_HREDRAW |CS_VREDRAW; RegisterClass(&wndcls); HWND hwnd; hwnd=CreateWindow(WHUT,键盘实例,WS_OVERLAPPEDWINDOW /*& WS_MINIMIZEBOX*/, 0,0,600,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL/*SW_MINIMIZE*/); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg,NULL,0,0) Trans
23、lateMessage(&msg); DispatchMessage(&msg);/ return 0;LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) HDC hDC; /定义设备环境句柄 PAINTSTRUCT ps; /定义包含绘图信息的结构体变量 HBRUSH hBrush; /定义画刷句柄 /下面定义并初始化按键标志变量 static BOOL nUpKeyDown=FALSE, nDownKeyDown =FALSE, nLeftKeyDown =FALSE, nRightKeyDow
24、n =FALSE, nShiftKeyDown=FALSE, nCtrlKeyDown=FALSE, nHomeKeyDown=FALSE, nEndKeyDown=FALSE; switch(iMessage) case WM_KEYDOWN: switch(wParam) case VK_LEFT: /当按向左箭头键时,变量置为真 l+; break; case VK_RIGHT: /当按向右箭头键时,变量置为真 r+; break; case VK_SHIFT: /当按Shift键时,变量置为真 x=1; break; case VK_CONTROL: /当按Control键时,变量置为
25、真 x=2; break; case VK_HOME: /当按Home键时,变量置为真 p+; break; case VK_END: /当按End键时,变量置为真 q+; break; case VK_UP: /当按向上箭头键时,变量置为真 u+; break; case VK_DOWN: /当按向下箭头键时,变量置为真 d+; break; default: break; InvalidateRect(hWnd,NULL,TRUE); break;case WM_PAINT: /处理绘图消息 hDC=BeginPaint(hWnd,&ps); hBrush = (HBRUSH)GetSto
26、ckObject(WHITE_BRUSH); /创建白画刷 SelectObject(hDC,hBrush); /选入白画刷 /输出信息: if(x=1) Rectangle(hDC,100+(r-l)*10,100+(d-u)*10,200+(r-l)*10+10*p,200+(d-u)*10+10*q); SelectObject(hDC,hBrush); /选入白画刷 else if(x=2) Ellipse(hDC,100+(r-l)*10,100+(d-u)*10,200+(r-l)*10+10*p,200+(d-u)*10+10*q); SelectObject(hDC,hBrus
27、h); /选入白画刷 /删除画笔和画刷 DeleteObject(hBrush); EndPaint(hWnd,&ps); break;case WM_DESTROY: PostQuitMessage(0); return 0;default: return(DefWindowProc(hWnd,iMessage,wParam,lParam);return 0;第三部分 结果与讨论(可加页)一、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)二、小结、建议及体会实验结果分析:如图所示为按ctrl键后程序响应画出圆形。实验中需注意对每个按键的消息响应。小结、建议及体会:通过本次实验了解windows应用程序中对键盘操作的响应,并掌握其编程方法,更好的理解鼠标及键盘的消息及其响应。实验课程名称:_可视化编程(VC) 实验项目名称基于MFC编程(一)实验成绩实 验 者汤东昌专业班级软件1002班组 别同 组 者实验日期 年 月 日一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等) 用MFC的向导创建编辑框,在编辑框中实现算术加、减、乘和除的运算。第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)先使用各个控件绘出如图所示界面然后为各个空