给出一些制作小动画和游戏的基本vc6和vc2005绘图功能。
画点和线
在第一章中,我们讨论了Windows图形设备接口将图形输出设备的设备驱动程序连接到计算机的方式。理论上,只要提供SetPixel和GetPixel函数,就可以用图形设备驱动程序画出一切。其他一切都可以由GDI模块中实现的高级例程来处理。比如画线的时候,只需要GDI多次调用SetPixel,适当调整X和Y坐标。
实际上,您可以通过使用SetPixel和GetPixel函数来做您需要的任何事情。你也可以基于这些函数设计一个简洁的、结构良好的图形编程系统。唯一的问题是开能。如果一个函数可以通过几次调用到达SetPixel函数,那么执行起来会非常慢。如果一个图形系统在设备驱动的层面上画线和执行其他复杂的图形操作,那么会有效得多,因为设备驱动优化了程序代码来完成这些操作。此外,一些图形卡包括图形协处理器,它允许视频硬件自己绘制图形。
设置像素
即使Windows GDI包含SetPixel和GetPixel函数,它们也很少被使用。在本书中,SetPixel函数只在第7章的CONNECT程序中使用,GetPixel函数只在第8章的WHATCLR程序中使用。尽管如此,从它们那里学习图形还是很方便的。
SetPixel函数在指定的x和y坐标上设置特定颜色的像素:
SetPixel (hdc,x,y,Cr color);
与任何绘图函数一样,第一个参数是设备内容的句柄。第二个和第三个参数表示坐标位置。通常需要获取窗口显示区域的设备内容,X和Y是相对于显示区域的左上角。最后一个参数是COLORREF类型指定颜色。如果视频监视器不支持函数中指定的颜色,函数会将像素设置为最接近的纯色,并返回函数的值。
GetPixel函数返回指定坐标处的像素颜色:
crColor = GetPixel (hdc,x,y);
直线
Windows可以绘制直线、椭圆线(椭圆圆周上的曲线)和贝塞尔曲线。Windows 98支持的七种画线功能是:
LineTo绘制一条直线。
多段线和多段线绘制一系列相连的直线。
PolyPolyline绘制多组相连的线。
Arc绘制一条椭圆线。
PolyBezier和PolyBezier绘制贝塞尔曲线。
此外,Windows NT还支持三种画线功能:
ArcTo和AngleArc绘制椭圆线。
PolyDraw绘制一系列相连的直线和贝塞尔曲线。
Windows 98不支持这三个功能。
在这一章的后面,我将介绍一些既画线又填充图形闭合区域的函数。这些功能是:
矩形绘制矩形。
椭圆绘制椭圆。
画一个圆角矩形。
饼图绘制椭圆的一部分,使其看起来像一个扇形。
Chord绘制椭圆的一部分使其弯曲。
设备内容的五个属性影响由这些函数绘制的线条的外观:当前画笔位置(仅用于LineTo、PolylineTo、PolyBezierTo和ArcTo)、画笔、背景模式、背景颜色和绘制模式。
要画直线,必须调用两个函数。第一个函数指定直线的起点,第二个函数指定直线的终点:
MoveToEx (hdc,xBeg,yBeg,NULL);
LineTo (hdc,xEnd,yEnd);
MoveToEx实际上并没有画线,只是设置了设备内容的“当前位置”属性。然后,LineTo函数从当前位置到它指定的点绘制一条直线。当前位置只是其他几个GDI函数的起点。在默认设备内容中,当前位置最初设置为点(0,0)。如果在调用LineTo之前没有设置当前位置,它会从显示区域的左上角画一条线。