CRgn::CreatePolygonRgn

创建多边形区域。

BOOL CreatePolygonRgn(
   LPPOINT lpPoints,
   int nCount,
   int nMode 
);

参数

  • lpPoints
    指向数组 POINT 结构或数组 CPoint 对象。 每个结构指定多边形的一个顶点x坐标和y坐标。 POINT 结构具有以下形式:

    typedef struct tagPOINT {

    int x;

    int y;

    } POINT;

  • nCount
    在 lpPoints所指向的数组指定 POINT 结构或 CPoint 对象的数目。

  • nMode
    为区域指定该加载模式。 此参数可以为 ALTERNATEWINDING

返回值

非零,如果操作成功;否则为0。

备注

该系统通过绘制线条如果需要,自动闭合多边形,从最后一个顶点到第一。 得到的边界。CRgn 对象存储。

区域的大小限制为内存32,767 x 32,767个逻辑单元或64K,后者较小。

当多边形加载模式是 ALTERNATE时,系统会加载在奇数和偶数多边形端之间区域中每扫描行。 即该系统加载在第一个和第二个边之间的区域,在第三个和第四个边之间,依此类推。

当多边形加载模式是 WINDING时,系统会使用来绘制确定是否加载区域的方向。 在多边形的每一行段都沿顺时针方向旋转或左转绘制。 每当从一个用绘制区域的一虚构的行到正在的外部通过一如果线段,计数递增。 当行通过一逆时针的行段时,计数递减。 区加载,如果计数不为零,当行到达该运行时的外部。

当应用程序完成使用 CreatePolygonRgn 功能时创建的区域,则应选择该区域在设备上下文之外和使用 DeleteObject 函数中移除。

示例

CRgn   rgnA, rgnB;

CPoint ptVertex[5];

ptVertex[0].x = 180;
ptVertex[0].y = 80;
ptVertex[1].x = 100;
ptVertex[1].y = 160;
ptVertex[2].x = 120;
ptVertex[2].y = 260;
ptVertex[3].x = 240;
ptVertex[3].y = 260;
ptVertex[4].x = 260;
ptVertex[4].y = 160;

VERIFY(rgnA.CreatePolygonRgn( ptVertex, 5, ALTERNATE));

CRect rectRgnBox;
int nRgnBoxResult = rgnA.GetRgnBox( &rectRgnBox );
ASSERT( nRgnBoxResult != ERROR && nRgnBoxResult != NULLREGION );

CBrush brA, brB;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));  // rgnA Red
VERIFY(pDC->FrameRgn( &rgnA, &brA, 2, 2 ));
VERIFY(brB.CreateSolidBrush( RGB(0, 0, 255) ));  // Blue
rectRgnBox.InflateRect(3,3);
pDC->FrameRect( &rectRgnBox, &brB );

要求

Header: afxwin.h

请参见

参考

CRgn 类

层次结构图

CRgn::CreatePolyPolygonRgn

CreatePolygonRgn