Visual C++面向对象与可视化程序设计;旋转的风车课程设计报告_第1页
Visual C++面向对象与可视化程序设计;旋转的风车课程设计报告_第2页
Visual C++面向对象与可视化程序设计;旋转的风车课程设计报告_第3页
Visual C++面向对象与可视化程序设计;旋转的风车课程设计报告_第4页
Visual C++面向对象与可视化程序设计;旋转的风车课程设计报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual C+面向对象 与可视化程序设计 课程设计题目名称:旋转的风车班级:计算机08-5姓名:Adam Roy学号:0804_利用VC+设计旋转的风车一 要求与分析在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红、黄和蓝,叶片外侧有一个外接圆。要求在程序中能够控制叶片的运转与停止,当开始运转时,速度由0逐渐变到最高速度;当停止时,由最高速度逐渐变为0。本课题对软硬件平台要求不高,操作系统可选择Windows2000/Window XP。在下控件来实现。二 MFC介绍 MFC (Microsoft Foundation Class ) 是用来编写Windows 应用程序的C + 类

2、集,其中封装了大局部Windows API 函数和Windows 控件,使用MFC 类库和Visual C + 提供的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性三 界面设计界面应满足以下要求:1, 界面首先要出现一个风车。2, 风车叶片要分红黄蓝三种颜色,外侧有一个外接圆。3在程序中能够控制叶片的运转与停止,当开始运转时,速度由0逐渐变到最高速度;当停止时,由最高速度逐渐变为0。4根据以上描述,程序运行时效果如下图。运行结果: 四 系统实现源程序:/ Instance_3_1_.cpp : Defines the entry point for the a

3、pplication./*在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红黄和蓝,叶片外侧有一个外接圆。*/#include <windows.h>#include <math.h>/ 回调函数声明LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);/ 初始化窗口类声明BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName);/ 初始化窗口声明BOOL InitWindows(HINST

4、ANCE hInstance, int nCmdShow, char *lpszClassName, char *lpTitle);WNDCLASS wndclass; / 定义一个窗口类HWND hwnd; / 定义一个窗口句柄const double Pi = 3.1415926;int nMaxNumber = 20; / 叶片循环一周中绘图的次数int nNum = 0; / 记录当前的顺序double time0=81;bool flag=0;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR

5、lpCmdLine, int nCmdShow)MSG Msg; / 定义消息char lpszClassName = "风车" / 窗口的类名char lpTitle = "根本绘图-旋转的风车" / 窗口标题名/ 初始化窗口类if (!InitWindowsClass(hInstance, lpszClassName)return FALSE;/ 初始化窗口if (!InitWindows(hInstance, nCmdShow, lpszClassName, lpTitle)return FALSE;/消息循环while(GetMessage(&a

6、mp;Msg, NULL, 0, 0)TranslateMessage(&Msg);DispatchMessage(&Msg);return Msg.wParam; / 程序终止时将信息返回系统/ 初始化窗口类定义BOOL InitWindowsClass(HINSTANCE hInstance, char *lpszClassName)/1、窗口类定义wndclass.style = 0; / 窗口类型为默认类型wndclass.lpfnWndProc = WndProc; / 窗口处理函数为 WNDPROCwndclass.cbClsExtra = 0; / 窗口类无扩展w

7、ndclass.cbWndExtra = 0; / 窗口实例无扩展wndclass.hInstance = hInstance; / 当前实例句柄wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); / 窗口的最小化图标为默认图标wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); / 窗口采用箭头光标wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); / 窗口采用白色背景 wndclass.lpszMenuName = NULL; /

8、 窗口中无菜单wndclass.lpszClassName = lpszClassName; /类名为 lpClassName/2、注册窗口类if (!RegisterClass(&wndclass) / 如果注册失败那么发出警告声音MessageBeep(0);return FALSE;return TRUE;/ 初始化窗口声明BOOL InitWindows(HINSTANCE hInstance, int nCmdShow, char *lpszClassName, char *lpTitle)/3、创立窗口hwnd = CreateWindow(lpszClassName, l

9、pTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, 600, 450, NULL, NULL, hInstance, NULL);/4、显示窗口ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);return TRUE;/ 回调函数定义LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)HDC hDC; / 定义设备环境句柄HPEN hPen; / 定义画笔句柄HBRUSH hBrush; / 定义画刷句柄PA

10、INTSTRUCT PtStr; / 定义包含绘制信息的结构体变量POINT pCenterPoint; / 定义一个圆尽心点的坐标int nRadious = 50;/ 定义圆的半径double fAngle; / 叶片的直边与水平轴的夹角switch(message)case WM_PAINT: / 处理绘图消息hDC = BeginPaint(hwnd, &PtStr); / 得到设备句柄SetMapMode(hDC, MM_ANISOTROPIC); / 设置映像模式SetWindowExtEx(hDC, 400, 300, NULL); / 设置窗口区域逻辑单位SetView

11、portExtEx(hDC, 600, 450, NULL); / 设置视口区域物理单位SetViewportOrgEx(hDC, 300, 200, NULL); / 设置视口原点坐标为300, 200/ 绘制外圆hPen = (HPEN)GetStockObject(BLACK_PEN);SelectObject(hDC, hPen);Ellipse(hDC, -100, -100, 100, 100);/ 绘制风车的叶片/ 1、画红色叶片hBrush = CreateSolidBrush(RGB(255, 0, 0); SelectObject(hDC, hBrush);fAngle =

12、 2 * Pi / nMaxNumber * nNum;pCenterPoint.x = (int)(nRadious * cos(fAngle);pCenterPoint.y = (int)(nRadious * sin(fAngle);Pie(hDC, pCenterPoint.x - nRadious, pCenterPoint.y - nRadious, pCenterPoint.x + nRadious, pCenterPoint.y + nRadious, (int)(pCenterPoint.x + nRadious * cos(fAngle),(int)(pCenterPoin

13、t.y + nRadious * sin(fAngle), (int)(pCenterPoint.x + nRadious * cos(fAngle + Pi), (int)(pCenterPoint.y + nRadious * sin(fAngle + Pi);/ 2、画天蓝色叶片hBrush = CreateSolidBrush(RGB(255, 255, 0); SelectObject(hDC, hBrush);pCenterPoint.x = (int)(nRadious * cos(fAngle + 2 * Pi / 3);pCenterPoint.y = (int)(nRadi

14、ous * sin(fAngle + 2 * Pi / 3);Pie(hDC, pCenterPoint.x - nRadious, pCenterPoint.y - nRadious, pCenterPoint.x + nRadious, pCenterPoint.y + nRadious, (int)(pCenterPoint.x + nRadious * cos(fAngle + 2 * Pi / 3), (int)(pCenterPoint.y + nRadious * sin(fAngle + 2 * Pi / 3), (int)(pCenterPoint.x + nRadious

15、* cos(fAngle + Pi + 2 * Pi / 3),(int)(pCenterPoint.y + nRadious * sin(fAngle + Pi + 2 * Pi / 3);/ 2、画黄色叶片hBrush = CreateSolidBrush(RGB(0, 255, 255); SelectObject(hDC, hBrush);pCenterPoint.x = (int)(nRadious * cos(fAngle + 4 * Pi / 3);pCenterPoint.y = (int)(nRadious * sin(fAngle + 4 * Pi / 3);Pie(hDC

16、, pCenterPoint.x - nRadious, pCenterPoint.y - nRadious, pCenterPoint.x + nRadious, pCenterPoint.y + nRadious, (int)(pCenterPoint.x + nRadious * cos(fAngle + 4 * Pi / 3), (int)(pCenterPoint.y + nRadious * sin(fAngle + 4 * Pi / 3), (int)(pCenterPoint.x + nRadious * cos(fAngle + Pi + 4 * Pi / 3),(int)(

17、pCenterPoint.y + nRadious * sin(fAngle + Pi + 4 * Pi / 3);nNum+; / 当前充数增加1if(time0<=80)if(flag&&time0>30)time0-;if(!flag&&time0<=80)time0+;InvalidateRect(hwnd, NULL, 1); / 重绘窗口区域DeleteObject(hPen);DeleteObject(hBrush);EndPaint(hwnd, &PtStr);break;Case WM_LBUTTONDOWN: /点击鼠标左键开始旋转time0=80;flag=1;InvalidateRect(hwnd, NULL, 1);break;Case WM_RBUTTONDOWN: /点击鼠标右键停止旋转flag=0;break;case WM_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论