CRgn::CombineRgn
2 個の既存の領域を結合して新しい GDI の領域を作成します。
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode
);
パラメーター
pRgn1
既存の領域を指定します。pRgn2
既存の領域を指定します。nCombineMode
2 個のソース領域を結合する場合に実行する操作を指定します。次のいずれかの値になります。RGN_AND は両方の領域間の領域の重複 (インターセクション) を使用します。
RGN_COPY 領域は 1 のコピーを作成します ( pRgn1で識別される)。
RGN_DIFF 領域は 2 の一部ではない領域 1 の領域から作成します ( pRgn1で識別される) で構成される領域 ( pRgn2で識別される)。
RGN_OR は両方の領域を完全に結合します (結合)。
RGN_XOR は領域に重複する二つの領域を結合削除します。
戻り値
結果の領域の種類を指定します。次のいずれかの値が返されます。
COMPLEXREGION の新しい領域に境界線が重複することがあります。
[エラー] 作成された新しい領域はありません。
NULLREGION の新しい領域は空です。
SIMPLEREGION の新しい領域に重複の境界線がありません。
解説
領域は nCombineModeに指定されているように結合されます。
2 つが領域を結合して指定し、その領域のハンドルは CRgn のオブジェクトに格納されます。したがって、の領域が CRgn のオブジェクトに格納されている結合された領域に置き換えられます。
領域のサイズは 32,767 の論理単位またはメモリの 32,767 KB により小さい、どの場合でも、制限されます。
単に別の領域に 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