次の方法で共有


CRgn::CombineRgn

既存の 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

参照

参照

CRgn クラス

階層図

CRgn::CopyRgn

CombineRgn

その他の技術情報

CRgn のメンバー