标题：图形设备接口
概述
在Windows操作系统下，绝大多数具备图形界面的应用程序都离不开图形设备接口，我们利用图形设备接口所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形，文本等操作。图形设备接口的出现使程序员无需要关心硬件设备及设备驱动，就可以将应用程序的输出转化为硬件设备上的输出，实现了程序开发者与硬件设备的隔离，大大方便了开发工作。 
图形设备接口（GDI）提供了一系列的函数和相关的结构，应用程序可以使用它们在显示器、打印机或其他设备上生成图形化的输出结果。使用GDI函数可以绘制直线、曲线、闭合图形、路径、文本以及位图图像。所绘制的图形的颜色和风格依赖于所创建的绘图对象，即画笔、笔刷和字体。你可以使用画笔来绘制直线和曲线，使用笔刷来填充闭合图形的内部，使用字体来书写文本。
应用程序通过创建设备环境（DC），可以直接向指定的设备进行输出。设备环境是一个GDI管理的结构。其中包含一些有关设备的信息，比如它的操作方式及当前的选择。应用程序可使用设备环境函数来创建DC。GDI将返回一个设备环境句柄，在随后的调用中，该句柄用于表示该设备。例如，应用程序可以使用该句柄来获取有关该设备性能的一些信息，诸如它的类型（显示器、打印机或其他设备），它的显示界面的尺寸和分辨率等。
应用程序可以直接向一个物理设备进行输出，比如显示器或打印机；也可以向一个"逻辑"设备进行输出，比如内存设备或元文件。逻辑设备向应用程序所提供的保存输出结果的格式，可以很容易地将其发送到物理设备上。一旦应用程序将输出结果记录到了一个元文件中，那么该元文件就可以被使用任意多次，并且该输出结果可以被发送到任意多个物理设备上。
应用程序可以使用属性函数来设置设备的操作方式和当前的选择。操作方式包括文本和背景颜色，混色方式（也称为二元光栅操作，用于确定画笔或笔刷的颜色与绘图区域现有的颜色如何进行混色），映射方式（用于指定GDI如何将应用程序所用的坐标映射到设备坐标系统上）。当前的选择是指绘图时使用哪个绘图对象。
图形设备接口函数
图形设备接口函数包括以下几类：
位图函数（Bltmap）
位图是一个图形对象，可将图像作为文件进行创建、处理（比例缩放、滚动、旋转和绘制）和存储。
位图函数提供了一系列处理位图的方法。
笔刷函数（Brush）
笔刷是一种绘图工具，Win32应用程序可使用它绘制多边形、椭圆形和路径的内部。绘图应用程序使用笔刷绘制图形；字处理应用程序使用笔刷绘制水线；计算机辅助设计（CAD）应用程序使用笔刷绘制截面视图的内部；电子表格应用程序使用笔刷绘制饼图的扇形和直方图的方条。笔刷函数提供了一系列创建和使用笔刷的方法。
剪裁函数（Clipping）
剪裁是一种处理过程，它将输出到某个区域或路径中的内容限制在应用程序窗口的显示区内。剪裁函数提供了一系列处理剪裁区域的方法。
颜色函数（Color）
颜色是组成Win32应用程序所生成的图片和图像的一个重要元素。 Win32 API提供了一系列管理和使用画笔、笔刷、文本和位图的颜色的函数。
坐标空间及映射函数（Coordinate Space and Transformation）
Win32应用程序使用坐标空间和映射函数对输出的图形进行比例缩放、旋转、转换、剪裁和反射。
坐标空间是基于笛卡尔坐标系统的一个平面空间。该坐标系统要求有两个垂直相交的、长度相等的坐标轴。共有4种坐标空间：现实坐标、页面坐标、设备坐标、物理设备坐标（显示区，或桌面，或打印纸的页面）。映射方式就是改变（"映射"）对象的大小、方向和形状的一种算法。
设备环境函数（Device Context）
设备环境是一个结构，它定义了一系列图形对象及其相关的属性，以及会影响输出结果的绘图方式。这些图形对象包括：画笔（用于画直线），笔刷（用于绘图和填充），位图（用于屏幕的拷贝或滚动），调色板（用于定义可用的颜色集），剪裁区（用于剪裁和其他操作），路径（用于绘图和画图操作）。设备环境函数用于对设备环境进行创建、删除或获取信息。
填充图形函数（Filled Shape）
填充图形是一些几何图形，其轮廓由当前的画笔绘制，内部由当前的笔刷填充。共有5种填充图形：椭圆，弦图，饼图，多边形，矩形。填充图形函数用于对填充图形进行操作。
字体和文本函数（Font and Text）
字体用于在视频显示器或其他输出设备上绘制文本。Win32 API提供了一系列用于安装、选择和查询各种字体的字体和文本函数。
ICM 2.0函数
Microsoft Windows 98和Windows NT 5.0所使用的颜色管理方案称为 Image Color Management版本 2.0，或ICM2.0，由一系列函数组成。
直线和曲线函数（Line and Curve）
直线和曲线用于在光栅设备上绘制输出图形。一条直线是光栅显示器上的一系列高亮像素点（或打印纸上的一系列点），由两个点进行标识：起点和终点。一条规则曲线也是光栅显示器上的一系列高亮像素点（或打印纸上的一系列点），符合某个二次曲线段的周界（或一部分）。不规则曲线则是由不符合二次曲线段的一系列像素点组成。
元文件函数（Metafile）
元文件是一个结构的集合，这些结构是以与设备无关的格式存储图像。设备无关是元文件与位图的差异之一。与位图不同，元文件保证是与设备无关的。不过，元文件有一个缺点：它通常比位图的绘图速度慢。因此，如果一个应用程序要求有较快的绘图速度，而不需要具有设备无关性，则应该用位图代替元文件。
元文件函数提供了一些对元文件进行操作的方法。
多显示器支持函数（Multple Display Monltors）
每个Windows工作站所支持的显示器个数是不受限制的。可以用创建邻接区域的方式安排多个显示器。每个显示器的大小和颜色深浅都可以独立设置。
所有的显示器屏幕一起构成了一个虚拟屏幕。桌面窗口覆盖整个虚拟屏幕，而不仅仅是某个显示屏幕。由于现有的应用程序都要求显示器具有一个原点坐标（0，0），所以虚拟屏幕必须在某个显示器上包含原点坐标（0，0），这个显示器就被看作是主显示器。
每个物理显示设备都由一个HMONITOR类型的显示器句柄表示。一个显示器在它的整个生存期间具有相同的HMONITOR值。
任何显示设备环境（DC）的Win32函数所返回的值都是主显示器的DC。要想获取其他显示器的DC，可使用EnumDisplayMonitors函数。系统对每个显示器调用回调函数，为该显示器传入一个DC值。用户可以使用该DC在该显示器上绘图。
绘图和画图函数（Painting and Drawing）
绘图和画图函数为应用程序提供了一系列在窗口中绘图的方法，以及如何创建和使用显示设备环境（DC）的方法。
路径函数（Path）
一个路径是指一个或多个被填充、被绘制轮廓或既被填充又被绘制轮廓的图形（或形状）。Win32应用程序将路径用作很多用途，在绘图和画图应用程序中使用路径。计算机辅助设计（CAD）应用程序用路径来创建唯一剪裁区，绘制不规则形状的轮廓，以及填充不规则形状的内部。路径函数用于创建、改变和绘制路径。
画笔函数（Pen）
画笔是Win32应用程序用于绘制直线和曲线的图形工具。画图应用程序使用画笔来画手画线、直线以及曲线。计算机辅助设计（CAD）应用程序用画笔来画可见线、隐藏线、截面线、中心线等等。字处理和桌面出版应用程序用画笔来画边界和水线。电子表格应用程序用画笔来指明图表的趋向，以及勾勒直方图和饼图的轮廓。画笔函数提供了一系列使用画笔的方法。
打印和打印假脱机函数（Printing and Print Spooler）
Microsoft Windows和Windows NT提供了一套完整的函数，使应用程序可以在不同的设备上进行打印，如激光打印机，向量绘图仪，光栅打印机，以及传真机等。
矩形函数（Rectangle）
Win32应用程序使用矩形来指定显示屏幕上或窗口中的一个矩形区域。矩形函数用于对矩形进行操作。
区域函数（Region）
区域是指一个可被填充、着色、转换和加外框的形状，包括矩形、多边形或椭圆（或这几种形状的组合），用于完成击键测试（测试光标位置）。
区域函数用于对区域进行操作。