CRgn::CombineRgn
更新 : 2007 年 11 月
既存の 2 つの領域を結合して新しい GDI 領域を作成します。
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode
);
パラメータ
pRgn1
既存の領域を識別します。pRgn2
既存の領域を識別します。nCombineMode
2 つの領域の結合方法を指定します。次のいずれかの値になります。RGN_AND 2 つの領域の重なりあった部分を使います (積集合)。
RGN_COPY 領域 1 (pRgn1 で識別される) のコピーを作成します。
RGN_DIFF 領域 1 (pRgn1 で識別される) の中で、領域 2 (pRgn2 で識別される) の一部となっていない部分から成る領域を作成します。
RGN_OR 2 つの領域すべてを合わせて 1 つの領域を作ります (結合)。
RGN_XOR 2 つの領域を合わせたものから重なりあった部分を取り除いた領域を作成します。
戻り値
作成される領域の型を指定します。次のいずれかの値を指定できます。
COMPLEXREGION 新しい領域には、重なり合った境界線があります。
ERROR 新しい領域は作成されませんでした。
NULLREGION 新しい領域は空です。
SIMPLEREGION 新しい領域には重なり合う境界線がありません。
解説
領域は nCombineMode で指定された方法で結合されます。
2 つの指定された領域が結合されてできた領域のハンドルは CRgn オブジェクトに格納されます。CRgn オブジェクトに格納された領域がどのような領域でも、結合された領域に置き換えられます。
領域のサイズは、論理単位で 32,767 × 32,767、または 64K のメモリのいずれか小さい方で制限されます。
単に、1 つの領域をほかの領域にコピーするだけならば 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 ));
必要条件
ヘッダー : afxwin.h