由于操作系统的种类繁多,它们所提供的与设备无关的图形接口千差万
别,因而指望程序语言包含所有的操作系统的与设备无关的图形接口是不现实的.对需要
跨越多种软硬件平台的程序语言来说,合理的选择是让这种语言具备生产各种平台的图形
函数的能力而不是去集成,也就是说,让它具有编写操作系统和设备驱动程序的能力.这样
,我们就不需要把某种具体平台\具体设备的图形处理函数集成到语言内.这正是标准 c
的做法.
在DOS 编程时代,由于 DOS 没有提供一个与设备无关的图形接口( 这在 16 位的系
统下也确实很难作到),因此为了在应用程序中绘制图象就不得不直接和各种硬件或直接
和它们的驱动程序打交道.由于硬件的多样性,DOS 时代的图形编程是一件极其痛苦的事.
你必须有广泛的知识,了解硬件的各种选项和控制方法.可为应用程序购买的图形库极少,
而且这些图形库只能在特定的设备上工作,不能完全发挥硬件的能力. TC 的graphics
库是 DOS 时代 C 语言的最优秀的 "外挂" 之一, 它是 C 的 "外挂",不属于标准 C 的
范畴.即便如此, TC 的graphics 库所提供的设备驱动数量极其有限,不能充分发挥硬件
性能,无法处理象绘图仪\照排设备等图形输出设备.
Windows 简化了这项工作,因为 Windows 向用户提供了 GDI ( 图形设备接口) 这个
与设备无关的编程接口,另外一个最常用的编程接口就是著名的 DirectX, DirectX 几乎
是现代 3D 游戏的唯一图形编程接口.
我们首先来看看如何使用 GDI 接口,附带几个小程序来说明如何作图.C/C++ 的各种
著名的 Win32 IDE 都提供了相应的头文件供用户使用这个接口.这个接口的实现部分是
Windows 系统的一个组成部分: GDI . DLL
GDI 接口屏蔽了硬件的具体细节,它提供一个虚拟的图形设备供用户使用,这使得用
户可以用同样的函数集来操作不同的图形硬件.不管这个硬件是显示卡\打印机\绘图仪
\照排系统还是其他图形设备,用户都按照相同的方式来操作它们.
利用 GDI 接口,用户可以把所有设备都视为某个窗口的"设备场境"(Device Conte