CRgn 类
封装一个 Windows 图形设备接口 (GDI) 区域。
语法
class CRgn : public CGdiObject
成员
公共构造函数
名称 | 描述 |
---|---|
CRgn::CRgn | 构造 CRgn 对象。 |
公共方法
名称 | 描述 |
---|---|
CRgn::CombineRgn | 设置一个 CRgn 对象,使其等效于两个指定的 CRgn 对象的联合。 |
CRgn::CopyRgn | 设置一个 CRgn 对象,使其成为指定的 CRgn 对象的副本。 |
CRgn::CreateEllipticRgn | 使用椭圆形区域初始化 CRgn 对象。 |
CRgn::CreateEllipticRgnIndirect | 使用 RECT 结构定义的椭圆形区域初始化 CRgn 对象。 |
CRgn::CreateFromData | 根据给定的区域和转换数据创建区域。 |
CRgn::CreateFromPath | 通过选择添加到给定设备上下文的路径创建区域。 |
CRgn::CreatePolygonRgn | 使用多边形区域初始化 CRgn 对象。 如有必要,系统会通过从最后一个顶点到第一个顶点绘制一条线来自动闭合多边形。 |
CRgn::CreatePolyPolygonRgn | 使用由一系列闭合多边形组成的区域初始化 CRgn 对象。 这些多边形可能不相交,也可能重叠。 |
CRgn::CreateRectRgn | 使用矩形区域初始化 CRgn 对象。 |
CRgn::CreateRectRgnIndirect | 使用 RECT 结构定义的矩形区域初始化 CRgn 对象。 |
CRgn::CreateRoundRectRgn | 使用带圆角的矩形区域初始化 CRgn 对象。 |
CRgn::EqualRgn | 检查两个 CRgn 对象以确定它们是否等效。 |
CRgn::FromHandle | 在提供了 Windows 区域的句柄时返回指向 CRgn 对象的指针。 |
CRgn::GetRegionData | 使用描述给定区域的数据填充指定的缓冲区。 |
CRgn::GetRgnBox | 检索 CRgn 对象的边框的坐标。 |
CRgn::OffsetRgn | 按指定偏移量移动 CRgn 对象。 |
CRgn::PtInRegion | 确定指定点是否位于该区域中。 |
CRgn::RectInRegion | 确定指定矩形的任何部分是否位于区域的边界内。 |
CRgn::SetRectRgn | 将 CRgn 对象设置为指定的矩形区域。 |
公共运算符
“属性” | 描述 |
---|---|
CRgn::operator HRGN | 返回 CRgn 对象中包含的 Windows 句柄。 |
备注
区域是窗口内的椭圆形或多边形区域。 若要使用区域,需将类 CRgn
的成员函数与定义为类 CDC
成员的剪辑函数配合使用 。
CRgn
的成员函数可创建、更改和检索有关调用它们的区域对象的信息。
有关使用 CRgn
的详细信息,请参阅图形对象。
继承层次结构
CRgn
要求
标头:afxwin.h
CRgn::CombineRgn
通过组合两个现有区域来创建新的 GDI 区域。
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode);
参数
pRgn1
标识现有区域。
pRgn2
标识现有区域。
nCombineMode
指定合并两个源区域时要执行的操作。 可以是以下任一值:
RGN_AND,使用两个区域的重叠区域(交集)。
RGN_COPY,创建区域 1(由 pRgn1 标识)的副本。
RGN_DIFF,创建由区域 1(由 pRgn1 标识)中不属于区域 2(由 pRgn2 标识)的区域组成的区域。
RGN_OR,将两个区域整体合并(联合)。
RGN_XOR,将两个区域合并,但删除重叠区域。
返回值
指定生成的区域的类型。 可以为下列值之一:
COMPLEXREGION,新区域有重叠的边框。
ERROR,未创建新区域。
NULLREGION,新区域为空。
SIMPLEREGION,新区域没有重叠的边框。
备注
这些区域按 nCombineMode 指定的方式合并。
两个指定区域已合并,生成的区域句柄存储在 CRgn
对象中。 因此,对象中 CRgn
存储的任何区域都会替换为合并区域。
区域的大小限制为 32,767 x 32,767 个逻辑单元或 64K 内存,以较小者为准。
使用 CopyRgn 可简单地将一个区域复制到另一个区域。
示例
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRectRgn(50, 50, 150, 150));
VERIFY(rgnB.CreateRectRgn(100, 100, 200, 200));
VERIFY(rgnC.CreateRectRgn(0, 0, 50, 50));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_OR);
ASSERT(nCombineResult != ERROR && nCombineResult != NULLREGION);
CBrush br1, br2, br3;
VERIFY(br1.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &br1, 2, 2));
VERIFY(br2.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &br2, 2, 2));
VERIFY(br3.CreateSolidBrush(RGB(0, 0, 255))); // rgnC Blue
VERIFY(pDC->FrameRgn(&rgnC, &br3, 2, 2));
CRgn::CopyRgn
将 pRgnSrc 定义的区域复制到 CRgn
对象中。
int CopyRgn(CRgn* pRgnSrc);
参数
pRgnSrc
标识现有区域。
返回值
指定生成的区域的类型。 可以为下列值之一:
COMPLEXREGION,新区域有重叠的边框。
ERROR,未创建新区域。
NULLREGION,新区域为空。
SIMPLEREGION,新区域没有重叠的边框。
备注
新区域替换以前存储在 CRgn
对象中的区域。 此函数是 CombineRgn 成员函数的特例。
示例
请参阅有关 CRgn::CreateEllipticRgn 的示例。
CRgn::CreateEllipticRgn
创建椭圆形区域。
BOOL CreateEllipticRgn(
int x1,
int y1,
int x2,
int y2);
参数
x1
指定椭圆形边框左上角的逻辑 x 坐标。
y1
指定椭圆形边框左上角的逻辑 y 坐标。
x2
指定椭圆形边框右下角的逻辑 x 坐标。
y2
指定椭圆形边框右下角的逻辑 y 坐标。
返回值
如果操作成功,则为非零;否则为 0。
备注
区域由 x1、y1、x2 和 y2 指定的边框定义。 区域存储在 CRgn
对象中。
区域的大小限制为 32,767 x 32,767 个逻辑单元或 64K 内存,以较小者为准。
应用程序完成使用通过函数创建 CreateEllipticRgn
的区域后,应从设备上下文中选择该区域,并使用 DeleteObject
函数将其删除。
示例
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
VERIFY(rgnC.CreateRectRgn(0, 0, 1, 1));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_AND);
ASSERT(nCombineResult != ERROR && nOffsetResult != NULLREGION);
CBrush brA, brB, brC;
VERIFY(brC.CreateHatchBrush(HS_FDIAGONAL, RGB(0, 0, 255))); // Blue
VERIFY(pDC->FillRgn(&rgnC, &brC));
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &brA, 2, 2));
VERIFY(brB.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &brB, 2, 2));
CRgn::CreateEllipticRgnIndirect
创建椭圆形区域。
BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
参数
lpRect
指向包含椭圆形边框的左上角和右下角的逻辑坐标的 RECT
结构或 CRect
对象。
返回值
如果操作成功,则为非零;否则为 0。
备注
区域由 lpRect 指向的结构或对象定义,并存储在 CRgn
对象中。
区域的大小限制为 32,767 x 32,767 个逻辑单元或 64K 内存,以较小者为准。
应用程序完成使用通过函数创建 CreateEllipticRgnIndirect
的区域后,应从设备上下文中选择该区域,并使用 DeleteObject
函数将其删除。
示例
请参阅有关 CRgn::CreateRectRgnIndirect 的示例。
CRgn::CreateFromData
根据给定的区域和转换数据创建区域。
BOOL CreateFromData(
const XFORM* lpXForm,
int nCount,
const RGNDATA* pRgnData);
参数
lpXForm
指向 XFORM 数据结构,该结构定义要在区域执行的转换。 如果此指针为 NULL,则使用标识转换。
nCount
指定由 pRgnData 指向的字节数。
pRgnData
指向包含区域数据的 RGNDATA 数据结构。
返回值
如果该函数成功,则为非 0;否则为 0。
注解
应用程序可以通过调用 CRgn::GetRegionData
函数来检索区域的数据。
CRgn::CreateFromPath
通过选择添加到给定设备上下文的路径创建区域。
BOOL CreateFromPath(CDC* pDC);
参数
pDC
标识包含封闭的路径的设备上下文。
返回值
如果该函数成功,则为非 0;否则为 0。
备注
由 pDC 参数标识的设备上下文必须包含封闭的路径。 CreateFromPath
将路径转换为区域后 ,Windows 会丢弃设备上下文中的封闭的路径。
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);
CRgn::CreatePolyPolygonRgn
创建由一系列闭合多边形组成的区域。
BOOL CreatePolyPolygonRgn(
LPPOINT lpPoints,
LPINT lpPolyCounts,
int nCount,
int nPolyFillMode);
参数
lpPoints
指向定义多边形顶点的一组 POINT
结构或一组 CPoint
对象。 每个多边形必须显式闭合,因为系统不会自动闭合它们。 多边形是连续指定的。 POINT
结构采用以下格式:
typedef struct tagPOINT {
int x;
int y;
} POINT;
lpPolyCounts
指向整数数组。 第一个整数指定 lpPoints 数组中第一个多边形中的顶点数,第二个整数指定第二个多边形中的顶点数,以此类推。
nCount
指定 lpPolyCounts 数组中的整数总数。
nPolyFillMode
指定多边形填充模式。 此值可以是 ALTERNATE 或 WINDING。
返回值
如果操作成功,则为非零;否则为 0。
备注
生成的区域存储在 CRgn
对象中。
这些多边形可能不相交,也可能重叠。
区域的大小限制为 32,767 x 32,767 个逻辑单元或 64K 内存,以较小者为准。
当多边形填充模式为 ALTERNATE 时,系统会在每个扫描行上填充奇数多边形和偶数多边形边之间的区域。 也就是说,系统会填充第一条边和第二条边之间的区域、第三条边和第四条边之间的区域,以此类推。
当多边形填充模式为 WINDING 时,系统使用绘制图形的方向来确定是否填充区域。 多边形中的每条线段都按顺时针或逆时针方向绘制。 每当从闭合区域绘制到图形外部的虚线通过顺时针线段时,计数就会递增。 当此虚线通过逆时针线段时,计数将递减。 如果此虚线达到图形外部时计数为非零,则会填充区域。
应用程序完成使用通过函数创建 CreatePolyPolygonRgn
的区域后,应从设备上下文中选择该区域,并使用 CGDIObject::DeleteObject 函数将其删除。
CRgn::CreateRectRgn
创建存储在 CRgn
对象中的矩形区域。
BOOL CreateRectRgn(
int x1,
int y1,
int x2,
int y2);
参数
x1
指定区域左上角的逻辑 x 坐标。
y1
指定区域左上角的逻辑 y 坐标。
x2
指定区域右下角的逻辑 x 坐标。
y2
指定区域右下角的逻辑 y 坐标。
返回值
如果操作成功,则为非零;否则为 0。
备注
区域的大小限制为 32,767 x 32,767 个逻辑单元或 64K 内存,以较小者为准。
应用程序完成使用由 CreateRectRgn
创建的区域后,应使用 CGDIObject::DeleteObject 成员函数删除该区域。
示例
CRgn rgn;
BOOL bSucceeded = rgn.CreateRectRgn(50, 20, 150, 120);
ASSERT(bSucceeded == TRUE);
有关其他示例,请参阅 CRgn::CombineRgn。
CRgn::CreateRectRgnIndirect
创建存储在 CRgn
对象中的矩形区域。
BOOL CreateRectRgnIndirect(LPCRECT lpRect);
参数
lpRect
指向包含区域左上角和右下角的逻辑坐标的 RECT
结构或 CRect
对象。 RECT
结构采用以下格式:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
返回值
如果操作成功,则为非零;否则为 0。
备注
区域的大小限制为 32,767 x 32,767 个逻辑单元或 64K 内存,以较小者为准。
应用程序完成使用由 CreateRectRgnIndirect
创建的区域后,应使用 CGDIObject::DeleteObject 成员函数删除该区域。
示例
CRgn rgnA, rgnB, rgnC;
CRect rectA(50, 50, 150, 150);
CRect rectB(100, 50, 200, 150);
VERIFY(rgnA.CreateRectRgnIndirect(&rectA));
VERIFY(rgnB.CreateEllipticRgnIndirect(&rectB));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_AND );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FrameRgn( &rgnA, &brA, 2, 2 )); // rgnA Red
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FrameRgn( &rgnB, &brB, 2, 2 )); // rgnB Green
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CreateRoundRectRgn
创建存储在 CRgn
对象中的带圆角的矩形区域。
BOOL CreateRoundRectRgn(
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
参数
x1
指定区域左上角的逻辑 x 坐标。
y1
指定区域左上角的逻辑 y 坐标。
x2
指定区域右下角的逻辑 x 坐标。
y2
指定区域右下角的逻辑 y 坐标。
x3
指定用于创建圆角的椭圆形的宽度。
y3
指定用于创建圆角的椭圆形的高度。
返回值
如果操作成功,则为非零;否则为 0。
备注
区域的大小限制为 32,767 x 32,767 个逻辑单元或 64K 内存,以较小者为准。
应用程序完成使用通过函数创建 CreateRoundRectRgn
的区域后,应从设备上下文中选择该区域,并使用 CGDIObject::DeleteObject 函数将其删除。
示例
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRoundRectRgn( 50, 50, 150, 150, 30, 30 ));
VERIFY(rgnB.CreateRoundRectRgn( 200, 75, 250, 125, 50, 50 ));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_OR );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FillRgn( &rgnA, &brA)); // rgnA Red Filled
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FillRgn( &rgnB, &brB)); // rgnB Green Filled
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CRgn
构造 CRgn
对象。
CRgn();
注解
在使用一个或多个其他 CRgn
成员函数初始化对话之前,m_hObject
数据成员不包含有效的 Windows GDI 区域。
示例
请参阅有关 CRgn::CreateRoundRectRgn 的示例。
CRgn::EqualRgn
确定给定区域是否等效于存储在 CRgn
对象中的区域。
BOOL EqualRgn(CRgn* pRgn) const;
参数
pRgn
标识区域。
返回值
如果两个区域等效,则为非零;否则为 0。
示例
CRgn rgnA, rgnB;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
ASSERT(FALSE == rgnB.EqualRgn(&rgnA));
CRgn::FromHandle
在提供了 Windows 区域的句柄时返回指向 CRgn
对象的指针。
static CRgn* PASCAL FromHandle(HRGN hRgn);
参数
hRgn
指定 Windows 区域的句柄。
返回值
一个指向 CRgn
对象的指针。 如果函数未成功,则返回值为 NULL。
注解
如果 CRgn
对象尚未附加到句柄,则会创建并附加一个临时 CRgn
对象。 此临时 CRgn
对象仅在应用程序下次在其事件循环中有空闲时间之前有效,届时将删除所有临时图形对象。 另一种说法是,临时对象仅在处理一个窗口消息期间有效。
CRgn::GetRegionData
使用描述区域的数据填充指定的缓冲区。
int GetRegionData(
LPRGNDATA lpRgnData,
int nCount) const;
参数
lpRgnData
指向接收信息的 RGNDATA 数据结构。 如果此参数为 NULL,则返回值包含区域数据所需的字节数。
nCount
指定 lpRgnData 缓冲区的大小(以字节为单位)。
返回值
如果函数成功,且 nCount 指定足够的字节数,则返回值始终为 nCount。 如果函数失败,或 nCount 指定的字节数不足,则返回值始终为 0(错误)。
备注
此数据包括构成区域的矩形的尺寸。 此函数与 CRgn::CreateFromData
函数结合使用。
CRgn::GetRgnBox
检索 CRgn
对象的边框的坐标。
int GetRgnBox(LPRECT lpRect) const;
参数
lpRect
指向要接收边框坐标的 RECT
结构或 CRect
对象。 RECT
结构采用以下格式:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
返回值
指定区域的类型。 可以是以下任一值:
COMPLEXREGION,区域有重叠的边框。
NULLREGION,区域为空。
ERROR,
CRgn
对象不指定有效区域。SIMPLEREGION,区域没有重叠的边框。
示例
请参阅有关 CRgn::CreatePolygonRgn 的示例。
CRgn::OffsetRgn
按指定偏移量移动存储在 CRgn
对象中的区域。
int OffsetRgn(
int x,
int y);
int OffsetRgn(POINT point);
参数
x
指定向左或向右移动的单位数。
y
指定向上或向下移动的单位数。
point
point 的 x 坐标指定向左或向右移动的单位数。 point 的 y 坐标指定向上或向下移动的单位数。 point 参数可以是 POINT
结构或 CPoint
对象。
返回值
新区域的类型。 可以是以下任一值:
COMPLEXREGION,区域有重叠的边框。
ERROR,区域句柄无效。
NULLREGION,区域为空。
SIMPLEREGION,区域没有重叠的边框。
注解
函数将区域沿 x 轴移动 x 个单位,沿 y 轴移动 y 个单位。
区域的坐标值必须小于或等于 32,767,且大于或等于 -32,768。 必须谨慎选择 x 和 y 参数,以防止区域坐标无效。
示例
请参阅有关 CRgn::CreateEllipticRgn 的示例。
CRgn::operator HRGN
使用此运算符获取 CRgn
对象的附加 Windows GDI 句柄。
operator HRGN() const;
返回值
如果成功,则为由 CRgn
对象表示的 Windows GDI 对象的句柄;否则为 NULL。
备注
此运算符是强制转换运算符,它支持直接使用 HRGN 对象。
有关使用图形对象的详细信息,请参阅 Windows SDK 中的图形对象一文。
CRgn::PtInRegion
检查 x 和 y 给定的点是否位于存储在 CRgn
对象中的区域中。
BOOL PtInRegion(
int x,
int y) const;
BOOL PtInRegion(POINT point) const;
参数
x
指定要测试的点的逻辑 x 坐标。
y
指定要测试的点的逻辑 y 坐标。
point
point 的 x 坐标和 y 坐标指定要测试其值的点的 x 坐标和 y 坐标。 point 参数可以是 POINT
结构或 CPoint
对象。
返回值
如果点在区域内,则为非零;否则为 0。
CRgn::RectInRegion
确定 lpRect 指定的矩形的任何部分是否位于存储在 CRgn
对象中的区域边界内。
BOOL RectInRegion(LPCRECT lpRect) const;
参数
lpRect
指向 RECT
结构或 CRect
对象。 RECT
结构采用以下格式:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
返回值
如果指定矩形的任何部分位于区域边界内,则为非零;否则为 0。
CRgn::SetRectRgn
创建矩形区域。
void SetRectRgn(
int x1,
int y1,
int x2,
int y2);
void SetRectRgn(LPCRECT lpRect);
参数
x1
指定矩形区域左上角的 x 坐标。
y1
指定矩形区域左上角的 y 坐标。
x2
指定矩形区域右下角的 x 坐标。
y2
指定矩形区域右下角的 y 坐标。
lpRect
指定矩形区域。 可以是指向 RECT
结构或 CRect
对象的指针。
注解
但是,与 CreateRectRgn 不同,它不会从本地 Windows 应用程序堆中分配任何其他内存。 它使用为存储在 CRgn
对象中的区域分配的空间。 这意味着,在调用 SetRectRgn
之前,必须已经使用有效的 Windows 区域初始化 CRgn
对象。 x1、y1、x2 和 y2 给定的点指定了分配空间的最小大小。
使用此函数而不是 CreateRectRgn
成员函数,以避免调用本地内存管理器。