欢迎来到天天文库
浏览记录
ID:18530558
大小:473.00 KB
页数:63页
时间:2018-09-18
《windows程序设计 图形基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、图形基础图形设备接口(GDI:GraphicsDeviceInterface)是Windows的子系统,它负责在视频显示器和打印机上显示图形。正如您所认为的那样,GDI是Windows非常重要的部分。不只您为Windows编写的应用系统在显示视觉信息时使用GDI,就连Windows本身也使用GDI来显示使用者接口对象,诸如菜单、卷动列、图标和鼠标光标。不幸的是,如果要对GDI进行全面的讲述,将需要一整本书——当然不是这本书。在本章中,我只是想向您提供画线和填入区域的基本知识,这对于理解下面几章的GDI已经足够了。在后面几章中会
2、讲述GDI支持的位图、metafile以及格式化文字。GDI的结构从程序编写者的观点来看,GDI由几百个函数调用和一些相关的数据类型、宏和结构组成。但是在开始讲述这些函数的细节之前,让我们先从宏观上了解一下GDI的整体结构。GDI原理Windows98和MicrosoftWindowsNT中的图形主要由GDI32.DLL动态链接库输出的函数来处理。在Windows98中,这个GDI32.DLL实际是利用16位GDI.EXE动态链接库来运行许多函数。在WindowsNT中,GDI.EXE只用于16位的程序。这些动态链接库调用您安
3、装的视频显示器和任何打印机调用驱动程序中的例程。视频驱动程序存取视频显示器的硬件,打印机驱动程序将GDI命令转换为各种打印机能够理解的代码或者命令。显然,不同的视频显示卡和打印机要求不同的设备驱动程序。因为PC兼容机种上可以连接许多种不同的视频设备,所以,GDI的主要目的之一是支持与设备无关的图形。Windows程序应该能够毫无困难地在Windows支持的任意一种图形输出设备上运行,GDI通过将您的程序和不同输出设备的特性隔离开来的方法来达到这一目的。图形输出设备分为两大类:位映像设备和向量设备。大多数PC的输出设备是位映像设
4、备,这意味着它们以图点构成的数组来表示图像,这类设备包括视频显示卡、点阵打印机和激光打印机。向量设备使用线来绘制图像,通常局限于绘图机。许多传统的计算机图形程序设计方式都是完全以向量为主的,这意味着使用向量图形系统的程序与硬件有着一定层次的隔离。输出设备用像素表示图形,但是程序与程序接口之间并不是用像素进行沟通的。您当然可以使用WindowsGDI作为一个高阶的向量绘制系统,同时也可以将它用于比较低阶的像素操作。从这方面来看,WindowsGDI和传统的图形接口语言之间的关系,就如同C和其它程序设计语言之间的关系一样。C以它在
5、不同操作系统和环境之间的高度可移植性而闻名,然而C也以允许程序编写者进行低阶系统调用而闻名,这些调用在其它高级语言中通常是不可能的。正如C有时被认为是一种“高级汇编语言”一样,您可以认为GDI是图形设备硬件之间的一种高阶界面。您已经看到,Windows内定使用像素坐标系统。大多数传统的图形语言使用“虚拟”坐标系,其水平和垂直轴的范围在0到32,767之间。虽然有些图形语言不让您使用像素坐标,但是WindowsGDI允许您使用两种坐标系统之一(甚至依据实际度量衡的坐标系)。您可以使用虚拟坐标系以便让程序独立于硬件之外,或者也可以
6、使用设备坐标系而完全迎合硬设备提供的环境。某些程序编写者认为一旦开始使用操作像素的程序设计方式,就放弃了设备无关性。我们在上一章看到,这不完全是正确的,其中的诀窍是在与设备无关的方式中使用像素。这要求图形接口语言为程序提供一些方法来确定设备的硬件特征,并进行适当的调节。例如,在SYSMETS程序中,我们根据标准系统字体字符的像素大小来确定屏幕上的文字间距,这种方法允许程序针对分辨率、文字大小和方向比例各不相同的显示卡进行相应的调节。您将在本章看到一些用于确定显示尺寸的其它方法。早期,许多使用者在单色显示器上运行Windows。
7、即使是几年前,笔记本计算机也还只有灰阶显示。为此,GDI的设计保证了您可以在编写一个程序时不必太担心色彩问题——也就是说,Windows可以将色彩转换为灰阶显示。甚至在今天,Windows98使用的视频显示已经具有了不同的色彩能力(16色、256色、“high-Color”以及“true-color”)。虽然,彩色喷墨打印机的成本已经很低了,但是大多数使用者仍然坚持使用黑白打印机。盲目地使用这些设备是可以的,但是您的程序也应该能决定在某种显示设备上有多少色彩可以使用,从而最佳利用硬件功能。当然,就如同您编写C程序时,为了使它在
8、其它计算机上运行而遇到一些微妙的移植性问题一样,您也可能不小心让设备依赖性溜进您的Windows程序,这就是不与硬件完全隔离的代价。您还应该知道WindowsGDI的局限。虽然可以在显示器上到处移动图形对象,但GDI通常是一个静态的显示系统,只有有限的动画支持。如果需要为游戏
此文档下载收益归作者所有