5.4绘制填充区域
绘制线条的下一步就是如何填充一个封闭区域。下表列出了windows用于绘制带有边框的填充区域的7个函数:
函数名称 | 图 形 |
Rectangle | 直角矩形 |
Ellipse | 椭圆 |
Chord | 一个弓形,由椭圆圆周上的弧和一根炫组成 |
Pie | 椭圆上一个扇形 |
Polygon | 多边形 |
RoundRec | 圆角矩形 |
PolyPolygon | 多个多边形 |
Windows使用当前选入设备环境的画刷来填充图形。默认情况下,使用的是备用对象WHITE_BRUSH,Windows定义了六种备用画刷WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACH_BRUSH和NULL_BRUSH(又称为HOLLOW_BRUSH)。可以将任何一种备用画刷选入设备环境。Windows定义画刷的句柄为HBRUSH类型,定义一个HBRUSH句柄变量:
HBRUSH hBrush;
获取GRAY_BRUSH句柄可以通过调用以下的GetStockObject函数实现:
hBrush = GetStockObject(GRAY_BRUSH);
然后通过调用SelectObject函数将他选入设备环境:
SelectObject(hdc,hBrush);
当绘制一个不含边框的矩形时,要把NULL_PEN画笔选入设备环境:
SelectObject(hdc,GetStockObject(NULL_PEN));
如果只想绘制图形的边线,而不像填充图形的内部,可以将NULL_BRUSH选入设备环境:
SelectObject(hdc,GetStockObject(NULL_BRUSH));
也可以像自定义画笔一样自定义画刷,这个我们很快会谈到这个问题。
5.4.1Polygon函数和多边形填充模式
Polygon函数调用:
polygon(hdc,apt,iCount);
参数apt是一个POINT结构的数组,iCount是点的个数,如果数组中的最后一个点和第一个点不同,则windows会再加一条线连接最后一个点和第一个点(这个在polyline函数中不会这么做)。
PolyPolygon函数调用:
PolyPolygon(hdc,apt,aiCounts,iPolyCount);
这个函数是绘制多个多边形,最后一个参数是绘制多边形的个数。对于每个多边形,第三个参数给出了多边形定点的个数,数组apt含有全部多边形的所有顶点。除了返回值外,这个函数在功能上等同于一下代码:
for ( int i = 0 ,int iAccum = 0; i < iPolyCount; i++)
{
Polygon(hdc,apt + iAccum,aiCounts[i]);
iAccum += aiCounts[i];
}
SetPolyFillMode(hdc,iMode);
默认情况的填充模式是ALTERNATE(交替),但是也可以将它设定为WINDING(螺旋)。