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
为区域指定该加载模式。 此参数可以为 ALTERNATE 或 WINDING。
返回值
非零,如果操作成功;否则为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