·椭圆和多边形函数 ·绘图工具函数 ·位图函数 ·绘图属性函数 ·正文函救 ·映射函数。 ·坐标函数 ·元文件(metafile)函数 ·区域函数 ·裁剪(clipping)函数· ReleaseDc(hwnd,hdc); 使用下面第四种方法获取和释放设备上下文,可以在整个显示器区域内画图,图 形在整个显示器区域内部有效: hdc=CreateDC (lpszDriver ,lpszDevice ,lpszOutput , lpData); …画图操作… ReleaseDC(hdc); 其中lpszDriver指向设备驱动程序的DOS文件名(不带扩展名),lpszDevice指 向专用设备名(例如Epson Fx-80),lpszOutput指向物理输出介质(文件或输 出端口)的DOS文件名或设备名,lpData指向含有设备驱动程序的设备专用的初 始化数据的DEVMODE数据结构。例如: hdc=CreateDC("DISPLAY",NULL,NULL,NULL); 使用屏幕画图,而: hdc= CreateDC ("IBMGRX","IBM Graphics","LPT1",NULL ); 在打印机上输出企业即时通讯工具,这里的lpData置为默认值,可以在WIN.INI中找到初始化值。 如果不需要获取设备上下文,即不需要在设备上下文中操作,只需了解有关设备上 下文的信息,可以用如下语句: hdcInfo = CreateDC (lpszDriver, lpszDevice,lpszOutput, lpData ); RECT rcPaint; BOOL fRestore; BOOL flncUpdate; BYTE rgbReserved[16]; }PAINTSTRUCT; 其中,hdc用于标识显式上下文,fErase指出背景是否重画,rcPaint是涂色矩形, 其余的域均为保留。这里的hdc是BeginPaint返回的设备上下文句柄,有了从 DeginPaint获取的设备上下文句柄,就可以也只能在ps指出的rcPaint的矩形内绘 图,EndPaint调用使这一区域有效。 第二种方法如下所示,使用这种方法获取和释放设备上下文可以在整个用户区内 画图,企业即时通讯工具在整个用户区域内都有效: hdC=GetDc (hwnd ); …画图操作… ReleaseDC (hwnd , hdc ); 使用下面第三种方法获取和释放设备上下文,可以在整个窗口内画图,企业即时通讯工具在整 个窗口内有效: hdC=GetWindowDc(hwnd); …画图操作… 一部分,当调用CloseMetaFile时,设备上下文句柄变化无效,函数返回元文件(hmf) 的句柄。 一个设备上下文通常涉及物理设备,如视频显示器、打印机等,所以需要获取有 关该设备的信息,如显示器大小和彩色能力等。可以通过调用GetDeviceCaps函数 来获取这样的信息: nValue=GetDeviceCaps (hdc,nIndex); 这里的hdc标识设备上下文,nIndex确定返回值,它可以是window.h中所定义的 28个标识符中的一个,例如nIndex=DRIVEVERSION,则该函数返回的是版本号。 真正影响在用户区域上绘制过程的设备上下文属性是“映射方式”,与映射方式 属性密切相关的还有如下四个设备上下义属性:窗口原点、视窗原点、窗口范围 和视窗范围。 Windows定义了八种映射方式。 可以调用函数setMapMode(hdc,MapMode)来设置这八种映射方式中的一种。hdc用 来标识设备上下文,nMapMode可以取MM_TEXT、MM_LOMETRIC、MM_HIMETRIC等八个值 中的一个。在设置了映射方式之后,到下一次设置映射方式之前,Windows一直使用 这种映射方式。如果想要获取当前的映射方式,可用: nMapMode= GetMapMode (hdc) 在设置了映射方式之后,就规定了逻辑单位的大小和增量的方式,在GDI画图函数中, 可以不必考虑这些内容而直接使用逻辑数字,如: SetMapMode(hdc ,MM_TEXT); TextOut(hdc,8 ,16,szBuffer ,nLength) 即正文从用户区域左起第八个象素,顶边起第16个象素的位置开始写操作。不管映 射方式如何,Windows函数中所有坐标规定为-32768 到 32767之间的带符号短整救。 注意映射方式只是一个设备上下文属性,因此映射方式唯一起作用的是将映射方式作 为设备上下文句柄属性,而将该句柄当作参数的GDI函数,因此象GetSystemMetrics 这样的非GDI函数,将继续以设备单位(象素值)返回尺寸值。 用GDI的SetPixel函数可以绘制一特定颜色的象素: rgbActualColor =SetPixel (hdc,x,y,rgbColor); 这里hdc标识设备上下文,x ,y表示点坐标,rgbColor为一无符号的长整数,其结构为: COLORREF rgbColor; 其中低位字节为红基色的相对亮度值,第二个字节包含绿基色的相对亮度值, 第三个字节包含蓝基色的相对亮度值,高位字节必须为零。可以使用RGB函数 来获取rgbColor。 rgbColor =RGB(byRed ,byGreen,byBlue); 这里的byRed、byGreen、byBlue取值范围为0~255,分别代表红色、绿色、蓝 色的亮度。给出正确的参数之后,SetPixel返回的是调色板中最靠近所需彩色 的颜色。还可以使用如下方法来取得一个特定象素的颜色: rgbCotor= GetPixel(hdc,x,y); 画线函数主要有三种, LineTo、Polyline 和 Arc。还有五个设备上下文属性 会影响这些函数画出的线的外观:笔的当前位置(仅对LineTo有影响)、笔、 背景方式(对非实心笔有影响)、背景颜色(对 OPAQUE背景方式)以及绘制方式。 在这些设备上下文的属性中,笔的当前位置影响画线的起点,笔影响线的粗细 等形状,背景方式影响非实心笔画出的线的模板企业即时通讯工具,背景颜色影响线模板 背景色,绘制方式影响实心线、虚线等线属性。 以下是典型的画线操作步骤: MoveTo(hdc,xStart,yStart); LineTo(hdc ,xEnd ,yEnd); 上面两句画出一条从(xStart,yStart)到(xEnd,yEnd)的直线。 可以使用语句: …… DeteteDC (hdcInfo); 另外,还可以使用设备上下文来对位图的内存进行控制,如下所示: hdcMem = CreateCompatibleDC (hdc) OeleteDc(hdcMem ); 一个元文件是以二进制形式编码的GDI调用集合,可通过获取一个元文件设备上下文 来建立一个文件: hdcMeta=CreateMetaFile(lpszFilename); …… hmf=CloseMetaFile(hdCMeta); 在元文件设备上下文有效期间,使用hdcMeta所进行的任何GDI调用都成为元文件的 窗口应用程序输出企业即时通讯工具的操作步骤如下: ①取得指定窗口的当前显示设备上下丈,显示设备上下文实际上是一个数据结构, 它包括该窗口的参数及各种企业即时通讯工具、文字属性的现行设定值,它们对以后的企业即时通讯工具、 文字输 出命令起控制作用。 ②选择用户坐标系及映射方式。 ③设定用户坐标系中的观察窗口和设备坐标系中的显示视区。 ④输出企业即时通讯工具、文字和图象。 ⑤释放所使用的显示设备上下文。 当想要在企业即时通讯工具输出设备(例如屏幕或打印机)上绘制企业即时通讯工具时,必须首先获得设备 上下文的句柄。先给出这个句柄,Windows才允许程序使用设备,在GDI函数中将 句柄作为一个参数传入,向Windows标明需要使用的设备。 设备上下文中包含许多属性,当GDI在不同的设备上工作时都要用到这些属性。 使用这些属性可使GDI只关心起始和终止坐标的大小,而不必关心有关对象的其 他属性,如颜色、背景等等,因为这些都是设备上下文的一部分。当需要修改 这些属性时,只需调用一个修改设备上下文中属性的参数,以后的程序中都使 用修改后的设备上下文属性。设备上下文是连接Windows应用程序、设备驱动程 序以及输出设备的纽带。 获取设备上下文句柄有多种方法。最一般的方法是当处理一条消息时获得了设备 上下文、并在退出窗口之前释放它。一般的处理方法如下: 在处理WM_PAINT消息时 case WM_PAINT: hdc=BeginPaint(hwnd,&ps) 个其他的.DRV驱动程序文件用来控制打印机或绘图仪。 Windows GDI使用两种坐标系统。使用虚拟坐标系统可以使程序不依赖于具体的硬 件,使用设备坐标系统可以使程序和硬件紧密相联。 GDI含有在Windows应用程序内部执行、且与设备无关的企业即时通讯工具操作函数,这些函数可 产生各种各样的线、正文和位图,它们可以输出到许多不同的输出设备上。GDI允 许一个应用程序产生笔、刷子、字体和位图,以供特定的输出操作使用。下面列出 GDI中几组比较常用的函数: ·设备上下文函数 企业即时通讯工具设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在 输出设备(如视频显示器、打印机和绘图仪)上的与设备无关的企业即时通讯工具。 GDI通过将 应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无问题地在Windows 支持的任何企业即时通讯工具输出设备上运行。 Windows中的企业即时通讯工具基本上是由从GDI.EXE模块中输出的函数处理的(尽管一些绘制 函数实际上具有USER.EXE的入口点),GDI.EXE模块调用在不同驱动程序文件中 的例程,其中有一个.DRV驱动程序文件用于控制显示屏幕,并且可能有一个或多 EndPaint (hwnd,&ps); 其数据结构为: HDC hWnd; PAINTSTRUCT ps; 而在windows.h中定义了PAINTSTRUCT的数据结构。 type struct tagPAINTSTRUCT { HDC hdC; BOOL fErase; dwPoint = GetCurrentPosition (hdc); 获得笔的当前位置。这里,dwPoint返回值是一个无符号长整数(或双倍长 字),其中低位字含有X坐标,高位字含有Y坐标。 可以使用MAKEPOINT函数将dwPoint转换为POINT结构; point = MAKEPOINT (dwPoint); point的类型为POINT: typedef struct togPOINT {kk1}
|