|
, GetStockobject (NULL_BRUSH) ;
您也可以自订画刷,就如同您自订画笔一样。我们将马上谈到这个问题。
Polygon函式和多边形填入方式
我已经讨论过了前五个区域填入函式,Polygon是第六个画带边界框的填入图形的函式,该函式的呼叫与Polyline函式相似:
Polygon (hdc, apt, iCount) ;
其中,apt参数是POINT结构的一个阵列,iCount是点的数目。如果该阵列中的最後一个点与第一个点不同,则Windows将会再加一条线,将最後一个点与第一个点连起来(在Polyline函式中,Windows不会这么做)。PolyPolygon函式如下所示:
PolyPolygon (hdc, apt, aiCounts, iPolyCount) ;
该函式绘制多个多边形。最後一个参数给出了所画的多边形的个数。对於每个多边形,aiCounts阵列给出了多边形的端点数。apt阵列具有全部多边形的所有点。除传回值以外,PolyPolygon在功能上与下面的代码相同:
for (i = 0, iAccum = 0 ; i < iPolyCount ; i++) { Polygon (hdc, apt + iAccum, aiCounts[i]) ; iAccum += aiCounts[i] ; }
对於Polygon和PolyPolygon函式,Windows使用定义在装置内容中的目前画刷来填入这个带边界的区域。至於填入内部的方式,则取决於多边形填入方式,您可以用SetPolyFillMode函式来设定:
SetPolyFillMode (hdc, iMode) ;
内定情况下,多边形填入方式是ALTERNATE,但是您可以将它设定为WINDING。两种方式的区别参见图5-15所示。

| 图5-15
用两种多边形填入方式画出的图:ALTERNATE(左)和WINDING(右) |
首先,ALTERNATE和WINDING方式之间的区别很容易察觉。对於ALTERNATE方式,您可以设想从一个无穷大的封闭区域内部的点画线,只有假想的线穿过了奇数条边界线时,才填入封闭区域。这就是填入了 |