CRgn::CombineRgn
通过合并两个现有区域创建新的GDI区域。
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode
);
参数
pRgn1
标识现有区域。pRgn2
标识现有区域。nCombineMode
在合并两个源区域时,指定要执行的操作。 它可以是以下任一值:RGN_AND 使用复盖率区域两个区域(型交叉处)。
RGN_COPY 创建区域1的副本(由 pRgn1)。
RGN_DIFF 创建包含不属于区域2的区域区域1的区域(由 pRgn1) (由 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 ));
要求
Header: afxwin.h