Visual C++面向对象与可视化程序设计报告风车.docx
《Visual C++面向对象与可视化程序设计报告风车.docx》由会员分享,可在线阅读,更多相关《Visual C++面向对象与可视化程序设计报告风车.docx(10页珍藏版)》请在冰豆网上搜索。
VisualC++面向对象与可视化程序设计报告风车
VisualC++面向对象
与可视化程序设计
设计报告
题目名称旋转的风车
班级093班
姓名赵贵义
学号200928159
利用VC++设计旋转的风车
一要求与分析
在窗口中画一个旋转的风车风车中有三个叶片颜色分别为红、黄和蓝叶片外侧有
一个外接圆。
要求在程序中能够控制叶片的运转与停止当开始运转时速度由0逐渐变到
最高速度当停止时由最高速度逐渐变为0。
本课题对软硬件平台要求不高操作系统可
选择Windows2000/WindowXP。
在VisualC++6.0下控件来实现。
二MFC介绍
MFC(MicrosoftFoundationClass)是用来编写Windows应用程序的C++类集,其中封
装了大部分WindowsAPI函数和Windows控件,使用MFC类库和VisualC++提供的应用
程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性
三界面设计界面应满足以下要求
1界面首先要出现一个风车。
2风车叶片要分红蓝绿三种颜色,外侧有一个外接圆。
3在程序中能够控制叶片的运转与停止,当开始运转时,速度由0逐渐变到最高速度;当停止时由最高速度逐渐变为0。
4根据以上描述程序运行时效果如图所示。
运行结果
四系统实现
源程序
//Instance_3_1_.cpp:
Definestheentrypointfortheapplication.
//
/*************************************************************************
在窗口中画一个旋转的风车风车中有三个叶片颜色分别为红黄和蓝
叶片外侧有一个外接圆。
*************************************************************************/
#include
#include//回调函数声明
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAM
lParam);//初始化窗口类声明
BOOLInitWindowsClass(HINSTANCEhInstance,char*lpszClassName);
//初始化窗口声明
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow,char*lpszClassName,
char*lpTitle);
WNDCLASSwndclass;//定义一个窗口类
HWNDhwnd;//定义一个窗口句柄
constdoublePi=3.1415926;
intnMaxNumber=20;//叶片循环一周中绘图的次数
intnNum=0;//记录当前的顺序
doubletime0=81;
boolflag=0;
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
MSGMsg;//定义消息charlpszClassName[]="风车";//窗口的类名
charlpTitle[]="基本绘图-旋转的风车";//窗口标题名
//初始化窗口类
if(!
InitWindowsClass(hInstance,lpszClassName))
{
returnFALSE;
}
//初始化窗口
if(!
InitWindows(hInstance,nCmdShow,lpszClassName,lpTitle))
{
returnFALSE;
}
//消息循环
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
returnMsg.wParam;//程序终止时将信息返回系统
}
//初始化窗口类定义
BOOLInitWindowsClass(HINSTANCEhInstance,char*lpszClassName)
{
//1、窗口类定义
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);//窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口
采用白色背景
wndclass.lpszMenuName=NULL;//窗口中无菜单
wndclass.lpszClassName=lpszClassName;//类名为lpClassName
//2、注册窗口类
if(!
RegisterClass(&wndclass))
{//如果注册失败则发出警告声音
MessageBeep(0);
returnFALSE;
}
returnTRUE;
}
//初始化窗口声明
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow,char*lpszClassName,
char*lpTitle)
{
//3、创建窗口
hwnd=CreateWindow(
lpszClassName,
lpTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,600,450,NULL,NULL,
hInstance,
NULL
);
//4、显示窗口
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
returnTRUE;
}
//回调函数定义
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAM
lParam)
{
HDChDC;//定义设备环境句柄
HPENhPen;//定义画笔句柄
HBRUSHhBrush;//定义画刷句柄
PAINTSTRUCTPtStr;//定义包含绘制信息的结构体变量
POINTpCenterPoint;//定义一个圆尽心点的坐标
intnRadious=50;//定义圆的半径
doublefAngle;//叶片的直边与水平轴的夹角
switch(message)
{
caseWM_PAINT:
{//处理绘图消息
hDC=BeginPaint(hwnd,&PtStr);//得到设备句柄
SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式
SetWindowExtEx(hDC,400,300,NULL);//设置窗口区域逻辑单位
SetViewportExtEx(hDC,600,450,NULL);//设置视口区域物理单位
SetViewportOrgEx(hDC,300,200,NULL);//设置视口原点坐标为300200
//绘制外圆
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=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)(pCenterPoint.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)(nRadious*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)),