可视化程序设计实验三剖析.docx
《可视化程序设计实验三剖析.docx》由会员分享,可在线阅读,更多相关《可视化程序设计实验三剖析.docx(10页珍藏版)》请在冰豆网上搜索。
可视化程序设计实验三剖析
可视化程序设计实验三
设计一个应用程序(圆)
学生:
学号:
指导老师:
李家军
2015.4.25
一、实验任务:
窗口显示后在客户区显示有一个红色两象素宽线内部为黄色的圆,点击A或a键则圆会放大,点击S或s则圆会缩小,点击A/a一定次数后圆不能再放大,显示出一个对话框提示不能再大了,单击确定后对话框关闭,点击S/s一定次数后圆不能再缩小,显示出一个对话框提示不能再小了,单击确定后对话框关闭.要求窗口的标题栏显示你的学号和姓名,并将圆的面积显示在客户区的(100,20)以右的区域,格式为:
圆的面积=(xxxx)平方立米.本实验要求必须采用API方式编程。
二、步骤:
1.自主学习API方式编程;
2.确定相关变量,圆形面积,按键;
3.用窗口类来创建对象,调用函数;
4.在6.0环境下调试运行程序,并纠错;
5.分析实验结果,作出相应总结。
三、程序说明及程序流程图
程序说明:
窗口显示后在客户区显示有一个红色两象素宽线内部为黄色的圆,点击A或a键则圆会放大,点击S或s则圆会缩小,点击A/a3次数后圆不能再放大,显示出一个对话框提示不能再大了,单击确定后对话框关闭,点击S/s3次数后圆不能再缩小,显示出一个对话框提示不能再小了,单击确定后对话框关闭. 要求窗口的标题栏显示你的学号和姓名,并将圆的面积显示在客户区的(100,20)以右的区域,格式为:
圆的面积=(xxxx)平方立米.
四.实验结果及截图:
1实验程序运行结果:
2按下按键‘a’或‘A’图形变大
3.按下按键‘a’或‘A’三次后图形无法变大弹出提示框
4.按下按键‘s’或‘S’图形变小
5.按下按键‘s’或‘S’三次后图形无法变大弹出提示框
四.源程序
#include
#include
#include
WNDCLASSEXwndclass;
HWNDhWnd;
MSGmsg;
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
voidDraw(HDChdc,inti);
voidText(HDChdc,inti);
intii=0;
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)//主函数
{
wndclass.cbSize=sizeof(WNDCLASSEX);//窗口类的大小
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="窗口";//窗口类名为"窗口"
wndclass.hIconSm=NULL;//窗口类的小图标
if(!
RegisterClassEx(&wndclass))//注册失败报警
{
MessageBeep(0);
returnFALSE;
}
hWnd=CreateWindow//创建窗口
(
"窗口",//窗口类名
"何博12020229",//窗口实例的标题名
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT,CW_USEDEFAULT,//窗口左上角坐标默认
CW_USEDEFAULT,CW_USEDEFAULT,//窗口高和宽默认
0,//无父窗口
0,//无主菜单
hInstance,//创建此窗口应用程序的当前句柄
0//不使用该值
);
ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);//绘制用户区
while(GetMessage(&msg,NULL,0,0))//消息循环
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
returnmsg.wParam;//程序终止时将信息返回系统
}
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)//窗口函数代码
{
HDChdc;//定义指向设备的句柄
PAINTSTRUCTps;//定义指向包含绘图信息的结构体变量
switch(message)
{
caseWM_CHAR:
//按键响应
if(wParam=='A'||wParam=='a')//A/a图形增大并显示面积
{
hdc=GetDC(hwnd);
ii++;
Text(hdc,ii);
Draw(hdc,ii);
ReleaseDC(hwnd,hdc);
}
if(wParam=='S'||wParam=='s')//S/s图形减小并显示面积
{
hdc=GetDC(hwnd);
ii--;
Text(hdc,ii);
Draw(hdc,ii);
ReleaseDC(hwnd,hdc);
}
break;
caseWM_PAINT:
//处理覆盖的情况
hdc=BeginPaint(hwnd,&ps);
Text(hdc,ii);
Draw(hdc,ii);
EndPaint(hwnd,&ps);
break;
caseWM_DESTROY:
//发出WM_QUIT消息
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hwnd,message,wParam,lParam);
}
return0;
}
voidDraw(HDChdc,inti)//画图函数
{
HPENhPen;//定义指向画笔的句柄
HBRUSHhBrush;//定义指向画刷的句柄
SetMapMode(hdc,MM_ANISOTROPIC);//设置映像模式
if(i>=-3&&i<=3)
{
hPen=CreatePen(PS_SOLID,2,RGB(255,255,255));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,255));//画刷
SelectObject(hdc,hBrush);//选择画刷
SelectObject(hdc,hPen);//选择画笔
Ellipse(hdc,0,0,1000,1000);//清屏
hPen=CreatePen(PS_SOLID,2,RGB(255,0,0));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,0));//画刷
SelectObject(hdc,hBrush);//选择画刷
SelectObject(hdc,hPen);//选择画笔
Ellipse(hdc,200-20*i,200-20*i,400+20*i,400+20*i);//绘制圆
}
elseif(i<-3)
{
ii=-3;
hPen=CreatePen(PS_SOLID,2,RGB(255,255,255));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,255));//画刷
SelectObject(hdc,hBrush);//选择画刷
SelectObject(hdc,hPen);//选择画笔
Ellipse(hdc,0,0,1000,1000);//清屏
MessageBox(hWnd,"不能再小了!
","来自何博的提示",0);
}
else
{
ii=3;
hPen=CreatePen(PS_SOLID,2,RGB(255,255,255));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,255));//画刷
SelectObject(hdc,hBrush);//选择画刷
SelectObject(hdc,hPen);//选择画笔
Ellipse(hdc,0,0,1000,1000);//清屏
MessageBox(hWnd,"不能再大了!
","来自何博的提示",0);
}
}
voidText(HDChdc,inti)//输出文本函数
{
TEXTMETRICtm;
switch(i)
{
case0:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"圆的面积=(31400)平方米",22);
break;
case1:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"圆的面积=(45216)平方米",22);
break;
case2:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"圆的面积=(61544)平方米",22);
break;
case3:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"圆的面积=(80384)平方米",22);
break;
case-1:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"圆的面积=(20096)平方米",22);
break;
case-2:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"圆的面积=(11304)平方米",22);
break;
case-3:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"圆的面积=(5024)平方米",22);
break;
default:
SetTextColor(hdc,RGB(0,0,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,100,20,"错误!
无法再进行操作!
",22);
break;
}
}