第2讲 windows的图形设备接口及windows绘图 windows图形设备接口(gdi,graphics device interface)是为与设备无关的图形设计的。所谓设备的无关性,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时无需考虑特殊的呢硬件设置.pptVIP
- 14
- 0
- 约2.65万字
- 约 79页
- 2019-01-12 发布于福建
- 举报
第2讲 windows的图形设备接口及windows绘图 windows图形设备接口(gdi,graphics device interface)是为与设备无关的图形设计的。所谓设备的无关性,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时无需考虑特殊的呢硬件设置
创建的画笔和画刷选入设备环境后,调用函数Ellipse(…)绘制圆形下面这段代码是动态显示的关键: Sleep(100); //停0.1秒 if(i100) InvalidateRect(hWnd,NULL,1);//刷新用户区 调用Sleep(100)函数使程序暂停0.1秒。所含参数100代表暂停的时间,使用毫秒作单位。 i100时调用函数刷新用户区发送WM_PAINT消息 消息发到的 窗口的句柄 代表刷新 整个用户区 代表清除用户区中 所有的显示内容 #include windows.h #include stdlib.h #include string.h #include math.h #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(…,…,…,...) { …… // 填写窗口类属性 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); //更新并绘制用户区. 1. for(int j=0;j100;j++) //生成正弦曲线的点坐标. 2. { 3. lpSin[j].x=(long)(j*2*Pi/100*60); 4. lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100)); 5. } 6. while(GetMessage(Message,0,0,0)) 7. { 8. TranslateMessage(Message); //消息循环. 9. DispatchMessage(Message); 10. } 11. return Message.wParam; } long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam) { 1. HDC hDC; //定义设备环境句柄. 2. HBRUSH hBrush; //定义画刷句柄 3. HPEN hPen; //定义画笔句柄 4. PAINTSTRUCT PtStr;//定义包含绘图信息的结构体变量 5. switch(iMessage) { 6. case WM_PAINT: //处理绘图消息 7. hDC=BeginPaint(hWnd,PtStr); //获得设备环境指针 8. SetWindowOrgEx(hDC,-200,-200,NULL);//设置原点坐标 9. hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); //建新画笔 10. SelectObject(hDC,hPen); //选入画笔 11. Polyline(hDC,lpSin,100); //绘制正弦曲线 if(i=25) //第一个1/4周期. { 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=50)//第二个1/4周期. { hPen=CreatePen(PS_DASH,1,RGB(0,255,0)
原创力文档

文档评论(0)