资源描述:
《图形设备与绘图ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章Windows的图形设备接口及Windows绘图图形设备接口绘图工具和颜色的设置常用绘图函数应用实例图形设备接口设备无关性Windows是设备无关的操作系统,当一个Windows应用程序在屏幕或打印机上绘制文本或图形时,不像DOS程序那样直接画在硬件上,而是画在一个称为设备描述表的逻辑设备上。再由系统把逻辑设备上的图,影射到实际的物理设备上,如显示器打印机等.设备描述表(DeviceContext)是具体物理设备的一个逻辑描述,通过设备描述表不同的Windows应用程序可以共享硬件资源。图形设备接口(GraphicsDeviceInterface)是一组提供给用户操纵图形设备的函数
2、,负责系统与用户之间的信息交换,它是Windows系统的主要组成部分。通过将DC作为参数传递给GDI函数,就可以在DC对应的设备上绘图。坐标空间逻辑坐标:绘图函数使用逻辑坐标物理坐标:鼠标等事件获取的是物理坐标Windows应用程序和DC、GDI及硬件之间的关系Windows应用程序设备描述表图形设备接口(GDI)设备驱动程序物理硬件映像模式建立一个Win32演示程序,把下面代码放到一个菜单事件中,分别观察使用SetMapMode和不用时的输出,分析原因hdc=GetDC(hWnd);//当hWnd为空时获得屏幕POINToldOrg;//SetMapMode(hdc,MM_LOENGLI
3、SH);Rectangle(hdc,0,0,200,200);Ellipse(hdc,0,0,200,-200);ReleaseDC(hWnd,hdc);映像模式通过映像模式可以在一个统一的逻辑坐标系统中进行绘图,而不用考虑设备的物理坐标系统。映像模式定义了将逻辑单位转换为设备物理度量单位及设备的X和Y方向。Windows支持8种映像模式映像模式MM_TEXT(缺省)像素,Y向下增加。MM_LOENGLISH0.01英寸Y向上增加MM_HIENGLISH0.001英寸,Y向上增加。MM_LOMETRIC0.1毫米,Y向上增加。MM_HIMETRIC0.01毫米,Y向上增加。MM_TWIPS
4、1/1440英寸,Y向上增加。MM_ISOTROPIC自定义(X和Y使用相同的坐标值)自定义MM_ANISOTROPIC自定义(X和Y可以使用不同的坐标值)自定义映像模式的设置映像模式的获取与设置:intGetMapMode(hdc)intSetMapMode(hdc,newMapMode)窗口与视口用户使用的绘图区域称为窗口,系统用来显示图形的设备区域称为视口窗口的原点总是影射到视口的原点设置窗口视口原点把下面代码加入一菜单事件中,分别在:1.不设原点2.设置窗口原点,3.设置视口原点,查看结果hdc=GetDC(hWnd);POINToldOrg;//SetWindowOrgEx(hd
5、c,50,50,&oldOrg);//SetViewportOrgEx(hdc,50,50,&oldOrg);Rectangle(hdc,0,0,200,200);Ellipse(hdc,0,0,100,100);ReleaseDC(hWnd,hdc);窗口区域的设置:BOOLSetWindowExtEx(HDChdc,intnXExtent,intnYExtent,LPSIZElpSize)设置只有在MM_ISOTROPIC,MM_ANISOTROPIC影射模式下才有意义视口区域的设置:BOOLSetViewportExtEx(HDChdc,intnXExtent,intnYExtent
6、,LPSIZElpSize)设置只有在MM_ISOTROPIC,MM_ANISOTROPIC影射模式下才有意义窗口视口大小设置:示例1窗口视口大小设置:示例2窗口视口区域的设置举例hdc=GetDC(hWnd);POINToldOrg;SIZEsz;RECTrct;GetWindowRect(hWnd,&rct);intW,H;W=rct.right-rct.left;H=rct.bottom-rct.top;SetMapMode(hdc,MM_ISOTROPIC);SetWindowExtEx(hdc,W,-H,&sz);SetViewportExtEx(hdc,W,H,&sz);Set
7、ViewportOrgEx(hdc,W/2,H/2,&oldOrg);Rectangle(hdc,0,0,W/4,H/4);Ellipse(hdc,0,0,W/8,H/8);ReleaseDC(hWnd,hdc);hdc=GetDC(hWnd);POINToldOrg;SIZEsz;RECTrct;GetWindowRect(hWnd,&rct);intW,H;W=rct.right-rct.left;H=rct.bot