我们谈论过Windows图形设备接口将图形输出设备的设备驱动程序与计算机连在一起的方式。在理论上,只要提供SetPixel和GetPixel函数,就可以使用图形设备驱动程序绘制一切东西了。其余的一切都可以使用GDI模块中实作的更高阶的例程来处理。例如,画线时,只需GDI呼叫SetPixel数次,并适当地调整x和y坐标。
在实际情况中,也的确可以仅使用SetPixel和GetPixel函数进行您需要的任何绘制。您也可以在这些函数的基础上设计出简洁和构造良好的图形编程系统。唯一的问题是启能效率。如果一个函数通过几次呼叫才能到达SetPixel函数,那么它执行起来会非常慢。如果一个图形系统画线和进行其它复杂的图形操作是在设备驱动程序的层次上,它就会更有效得多,因为设备驱动程序对完成这些操作的程序代码进行了最佳化。此外,一些显示卡包含了图形协处理器,它允许视讯硬件自己绘制图形。
设定图素
即使Windows GDI包含了SetPixel和GetPixel函数,但很少使用它们。尽管如此,由它们开始来研究图形仍是非常方便。
SetPixel函数在指定的x和y坐标以特定的颜色设定图素:
SetPixel (hdc, x, y, crColor) ;
如同在任何绘图函数中一样,第一个参数是设备内容的句柄。第二个和第三个参数指明了坐标位置。通常要获得窗口显示区域的设备内容,并且x和y相对于该显示区域的左上角。最后一个参数是COLORREF型态指定了颜色。如果在函数中指定的颜色视讯显示器不支持,则函数将图素设定为最接近的纯色并从函数传回该值。
GetPixel函数传回指定坐标处的图素颜色:
crColor = GetPixel (hdc, x, y) ;
直线
Windows可以画直线、椭圆线(椭圆圆周上的曲线)和贝塞尔曲线。
- LineTo 画直线。
- Polyline和PolylineTo 画一系列相连的直线。
- PolyPolyline 画多组相连的线。
- Arc 画椭圆线。
- PolyBezier和PolyBezierTo 画贝塞尔曲线。
另外,Windows NT还支持3种画线函数:
- ArcTo和AngleArc 画椭圆线。
- PolyDraw 画一系列相连的线以及贝塞尔曲线。
一些既画线也填入所画图形的封闭区域的函数,这些函数是
- Rectangle 画矩形。
- Ellipse 画椭圆。
- RoundRect 画带圆角的矩形。
- Pie 画椭圆的一部分,使其看起来像一个扇形。
- Chord 画椭圆的一部分,以呈弓形。
设备内容的五个属性影响着用这些函数所画线的外观:目前画笔的位置(仅用于LineTo、PolylineTo、PolyBezierTo和ArcTo )、画笔、背景方式、背景色和绘图模式。
画一条直线,必须呼叫两个函数。第一个函数指定了线的开始点,第二个函数指定了线的终点:
MoveTo