CRgn::CreatePolyPolygonRgn

BOOL CreatePolyPolygonRgn( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode );

返回值:如果操作成功则返回非零值;否则返回0。

参数:
lpPoints指向一个POINT结构数组,或指向一个CPoint对象数组,该结构或对象定义了多边形的顶点。每一个多边形都必须被显式地关闭,因为系统不会自动地关闭它们。多边形被连续指定。
POINT结构具有下面这样的形式:
typedef struct tagPOINT
{
  int x;
  int y;
} POINT;

lpPolyCounts指向一个整数数组。第一个整数指定lpPoints数组中的第一个多边形的顶点数,第二个整数指定lpPoints数组中的第二个多边形的顶点数,如此等等。
nCount指定lpPolyCounts数组中的整数的总数。
nPolyFillMode指定多边形填充模式。这个值可以是ALTERNATE或WINDING。

说明:
此成员函数用来创建一个包含一系列封闭多边形的区域。获得的结果矩形被保存在CRgn对象中。
这些多边形可能是互相分开的,或可能时相互重叠的。
区域的大小被限制在32767×32767个逻辑单位和64K内存这两个值中较小的那个值的范围内。
当多边形的填充模式是ALTERNATE时,系统在每条扫描线上填充第奇数条边与第偶数条边之间的区域。也就是说,系统将填充第1条边和第2条边之间的区域;第3条边和第4条边之间的区域,等等。
当多边形的填充模式是WINDING时,系统使用绘图的方向来决定是否填充一个区域。多边形中的线段不是以顺时针方向就是以逆时针方向绘制的。一旦从一个封闭区域内向一个图形之外画的假想线穿过了一条顺时针线段时,便将某一计数值加1;若这条线穿过了一条逆时针线段,则将计数值减1。当假想线到达图形之外时,若计数值为非零,则区域被填充。
当使用完了由CreatePolyPolygonRgn函数创建的区域时,应用程序应该将此区域选择为设备环境外,并用CGDIObject::DeleteObject函数来删除它。

请参阅:
CRgn::CreatePolygonRgn, CDC::SetPolyFillMode, ::CreatePolyPolygonRgn