第四章 Windows的图形设备接口及Windows绘图 P83 4-6
2021-04-01 14:28
标签:删除 windows 变量 message 分享 程序设计 fine nap return 实验(实习)名称 图形程序设计及其应用 实验(实习)日期 一、实验目的 1.熟悉图形设备接口的概念及其应用。 二、实验内容及步骤 实验任务 1.熟悉基于图形应用的程序设计; 2.掌握刷新技术及其应用; 3.掌握映射模式的应用; 4.掌握绘图工具的使用。 实验内容 编写一个程序,在屏幕上出现一个圆心沿正弦曲线轨迹移动的实心圆,且每隔四分之一周期,圆的填充色和圆的周边颜色都发生变化,同时圆的半径在四分之一周期之内由正弦曲线幅值的0.2倍至0.6倍线性增长。 程序代码: #include #include #include #include #define Pi 3.1415926 long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); double dfTheta=0,dfRange=100.0; long i=0,j=0; long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange); POINT lpSin[100]; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) { HWND hwnd ; MSG Message ; WNDCLASS wndclass ; wndclass.cbClsExtra=0; //窗口类无扩展 wndclass.cbWndExtra=0; //窗口实例无扩展 wndclass.hInstance=hInstance; //当前实例句柄 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ; //窗口采用箭头光标 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色 wndclass.lpszMenuName=NULL; //窗口中无菜单 wndclass.lpszClassName="SIN" ; //窗口类名为"窗口" wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标 wndclass.lpfnWndProc=WndProc; //定义窗口处理函数 wndclass.style=0; if(!RegisterClass( &wndclass)) //如果注册失败则发出警告 { MessageBeep(0) ; return FALSE ; } //---------------- 创建窗口 ------------------- hwnd=CreateWindow( "SIN", //窗口类名 "4_6", //窗口实例的标题名 WS_OVERLAPPEDWINDOW, //窗口的风格 CW_USEDEFAULT, 0, //窗口左上角坐标为缺省值 CW_USEDEFAULT, 0, //窗口的高和宽为缺省值 NULL, //此窗口无父窗口 NULL, //此窗口无主菜单 hInstance, //创建此窗口的应用程序的当前句柄 NULL //不使用该值 ); //--------------- 显示窗口 ---------------------- ShowWindow( hwnd, nCmdShow) ; //-------------- 绘制用户区 --------------------- UpdateWindow(hwnd); //--------------- 消息循环 ---------------------- for(int j=0;j
{ lpSin[j].x=(long)(j*2*Pi/100*60); lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100)); } while( GetMessage(&Message, 0, 0, 0)) { TranslateMessage( &Message) ; DispatchMessage( &Message) ; } return Message.wParam; //消息循环结束即程序终止时将信息返回系统 } long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) { HDC hDC; //定义指向设备的句柄 HBRUSH hBrush; //定义指向画刷的句柄 HPEN hPen; //定义指向画笔的句柄 PAINTSTRUCT PtStr;//定义指向包含绘图信息的结构体变量 switch(iMessage) //处理消息 { case WM_PAINT: //处理绘图消息 hDC=BeginPaint(hWnd,&PtStr); SetWindowOrgEx(hDC,-200,-200,NULL); //设置映像模式 hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); //黑色画笔 SelectObject(hDC,hPen); //选择画笔 Polyline(hDC,lpSin,100); if(i
{ hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径 } else if(i
{ hPen=CreatePen(PS_DASH,1,RGB(0,255,0)); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径 } else if(i
{ hPen=CreatePen(PS_DASH,1,RGB(0,0,255)); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,0,255)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径 } else { hPen=CreatePen(PS_DASH,1,RGB(255,255,0)); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径 } SelectObject(hDC,hBrush); //选择画刷 SelectObject(hDC,hPen); lCentreX=lpSin[i].x; //圆心x坐标 lCentreY=lpSin[i].y; //圆心y坐标 Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious, lCentreX+lRadious,lCentreY+lRadious); //画圆 i++; DeleteObject(hPen); //删除画笔 DeleteObject(hBrush); //删除画刷 EndPaint(hWnd,&PtStr); //删除设备环境指针 Sleep(100); //停0.1秒 if(i
return 0; case WM_DESTROY: //关闭窗口 PostQuitMessage(0); return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } } 程序运行结果: 三、实验结果 通过本次试验我了解了基于图形应用的程序设计,掌握刷新技术及其应用;学会了映射模式的应用;并且基本了解了绘图工具的使用;进一步加深了对可视化的了解。 第四章 Windows的图形设备接口及Windows绘图 P83 4-6 标签:删除 windows 变量 message 分享 程序设计 fine nap return 原文地址:https://www.cnblogs.com/wangprince2017/p/9235987.html
下一篇:数组-寻找数组的中心索引
文章标题:第四章 Windows的图形设备接口及Windows绘图 P83 4-6
文章链接:http://soscw.com/index.php/essay/70971.html