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 的详细信息,请参阅图形对象

继承层次结构

CObject

CGdiObject

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 成员函数,以避免调用本地内存管理器。

另请参阅

CWnd 类
层次结构图