CRgn クラス

Windows のグラフィック デバイス インターフェイス (GDI) の領域をカプセル化したものです。

構文

class CRgn : public CGdiObject

メンバー

パブリック コンストラクター

名前 説明
CRgn::CRgn CRgn オブジェクトを構築します。

パブリック メソッド

名前 説明
CRgn::CombineRgn 指定した 2 つの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 RECTtructure によって定義された四角形領域を使用してCRgn オブジェクトを初期化します。
CRgn::CreateRoundRectRgn 角が丸い四角形領域を使用して、 CRgn オブジェクトを初期化します。
CRgn::EqualRgn 2 つの CRgn オブジェクトが等しいかどうかを確認します。
CRgn::FromHandle Windows 領域へのハンドルが指定されている場合は、 CRgn オブジェクトへのポインターを返します。
CRgn::GetRegionData 指定したバッファーに、指定された領域を記述するデータを格納します。
CRgn::GetRgnBox CRgn オブジェクトの外接する四角形の座標を取得します。
CRgn::OffsetRgn 指定したオフセットで CRgn オブジェクトを移動します。
CRgn::P tInRegion 指定したポイントがリージョン内にあるかどうかを判断します。
CRgn::RectInRegion 指定した四角形の一部が領域の境界内にあるかどうかを判断します。
CRgn::SetRectRgn CRgn オブジェクトを指定した四角形領域に設定します。

パブリック演算子

名前 説明
CRgn::operator HRGN CRgn オブジェクトに含まれる Windows ハンドルを返します。

解説

領域は、ウィンドウ内の楕円または多角形の領域です。 領域を使用するには、クラス CRgn のメンバー関数と、クラス CDCのメンバーとして定義されたクリッピング関数を使用します。

CRgnのメンバー関数は、呼び出されるリージョン オブジェクトに関する情報を作成、変更、および取得します。

CRgnの使用方法の詳細については、「Graphic オブジェクト」を参照してください。

継承階層

CObject

CGdiObject

CRgn

要件

ヘッダー: afxwin.h

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 論理ユニットまたは 64K のメモリのいずれか小さい方に制限されます。

CopyRgn を使用して、1 つのリージョンを別のリージョンにコピーします。

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 新しいリージョンには重複する境界線があります。

  • エラー 新しいリージョンは作成されません。

  • 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 以外。それ以外の場合は 0。

解説

領域は、 x1y1x2、および y2 で指定された外接する四角形によって定義されます。 領域は、 CRgn オブジェクトに格納されます。

領域のサイズは、32,767 から 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 以外。それ以外の場合は 0。

解説

領域は、 lpRect が指す構造体またはオブジェクトによって定義され、 CRgn オブジェクトに格納されます。

領域のサイズは、32,767 から 32,767 論理ユニットまたは 64K のメモリのいずれか小さい方に制限されます。

CreateEllipticRgnIndirect関数で作成されたリージョンの使用が完了したら、アプリケーションはデバイス コンテキストからリージョンを選択し、DeleteObject関数を使用して削除する必要があります。

CRgn::CreateRectRgnIndirect の例を参照してください。

CRgn::CreateFromData

指定した領域と変換データからリージョンを作成します。

BOOL CreateFromData(
    const XFORM* lpXForm,
    int nCount,
    const RGNDATA* pRgnData);

パラメーター

lpXForm
リージョンで実行する変換を定義する XFORMata 構造体を指します。 このポインターが NULL の場合は、ID 変換が使用されます。

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 オブジェクトの配列を指します。 各構造体は、多角形の 1 つの頂点の x 座標と y 座標を指定します。 POINT構造体の形式は次のとおりです。

typedef struct tagPOINT {
    int x;
    int y;
} POINT;

nCount
lpPointsが指す配列内のPOINT構造体またはCPointオブジェクトの数を指定します。

nMode
領域の塗りつぶしモードを指定します。 このパラメーターは、代替または巻き取りのいずれかになります。

戻り値

操作が成功した場合は 0 以外。それ以外の場合は 0。

解説

必要に応じて、最後の頂点から最初の頂点までの線を描画することで、多角形が自動的に閉じられます。 結果の領域は、 CRgn オブジェクトに格納されます。

領域のサイズは、32,767 から 32,767 論理ユニットまたは 64K のメモリのいずれか小さい方に制限されます。

多角形充填モードが ALTERNATE の場合、システムは、各スキャンラインの奇数と偶数のポリゴン辺の間の領域を塗りつぶします。 つまり、システムは、1 番目と 2 番目の側、3 番目と 4 番目の側の間の領域を塗りつぶします。

多角形充填モードが WINDING の場合、図が描画された方向を使用して、領域を塗りつぶすかどうかを判断します。 多角形の各線分は、時計回りまたは反時計回りの方向に描画されます。 囲まれた領域から図の外側に描画された虚数線が時計回りの線分を通過するたびに、カウントがインクリメントされます。 直線が反時計回りの線分を通過すると、カウントがデクリメントされます。 行が図の外側に達したときにカウントが 0 以外の場合、領域は塗りつぶされます。

アプリケーションは、 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 配列内の最初の多角形の頂点の数を指定します。2 番目の整数は、2 番目の多角形内の頂点の数を指定します。

nCount
lpPolyCounts 配列内の整数の合計数を指定します。

nPolyFillMode
多角形充填モードを指定します。 この値は、代替または巻線のいずれかになります。

戻り値

操作が成功した場合は 0 以外。それ以外の場合は 0。

解説

結果の領域は、 CRgn オブジェクトに格納されます。

多角形は不整合であるか、重複している可能性があります。

領域のサイズは、32,767 から 32,767 論理ユニットまたは 64K のメモリのいずれか小さい方に制限されます。

多角形充填モードが ALTERNATE の場合、システムは、各スキャンラインの奇数と偶数のポリゴン辺の間の領域を塗りつぶします。 つまり、システムは、1 番目と 2 番目の側、3 番目と 4 番目の側の間の領域を塗りつぶします。

多角形充填モードが WINDING の場合、図が描画された方向を使用して、領域を塗りつぶすかどうかを判断します。 多角形の各線分は、時計回りまたは反時計回りの方向に描画されます。 囲まれた領域から図の外側に描画された虚数線が時計回りの線分を通過するたびに、カウントがインクリメントされます。 直線が反時計回りの線分を通過すると、カウントがデクリメントされます。 行が図の外側に達したときにカウントが 0 以外の場合、領域は塗りつぶされます。

アプリケーションは、 CreatePolyPolygonRgn 関数で作成されたリージョンの使用を完了したら、デバイス コンテキストからリージョンを選択し、 CGDIObject::D eleteObject メンバー関数を使用して削除する必要があります。

CRgn::CreateRectRgn

CRgn オブジェクトに格納されている四角形領域を作成します。

BOOL CreateRectRgn(
    int x1,
    int y1,
    int x2,
    int y2);

パラメーター

x1
領域の左上隅の論理 x 座標を指定します。

y1
領域の左上隅の論理 y 座標を指定します。

x2
領域の右下隅の論理 x 座標を指定します。

y2
領域の右下隅の論理 y 座標を指定します。

戻り値

操作が成功した場合は 0 以外。それ以外の場合は 0。

解説

領域のサイズは、32,767 から 32,767 論理ユニットまたは 64K のメモリのいずれか小さい方に制限されます。

CreateRectRgnによって作成されたリージョンの使用が完了したら、アプリケーションで CGDIObject::D eleteObject メンバー関数を使用してリージョンを削除する必要があります。

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 以外。それ以外の場合は 0。

解説

領域のサイズは、32,767 から 32,767 論理ユニットまたは 64K のメモリのいずれか小さい方に制限されます。

CreateRectRgnIndirectによって作成されたリージョンの使用が完了したら、アプリケーションで CGDIObject::D eleteObject メンバー関数を使用してリージョンを削除する必要があります。

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 以外。それ以外の場合は 0。

解説

領域のサイズは、32,767 から 32,767 論理ユニットまたは 64K のメモリのいずれか小さい方に制限されます。

アプリケーションは、 CreateRoundRectRgn 関数で作成されたリージョンの使用を完了したら、デバイス コンテキストからリージョンを選択し、 CGDIObject::D eleteObject メンバー関数を使用して削除する必要があります。

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();

解説

m_hObject データ メンバーには、オブジェクトが他の CRgn メンバー関数の 1 つ以上で初期化されるまで、有効な Windows GDI 領域は含まれません。

CRgn::CreateRoundRectRgn の例を参照してください。

CRgn::EqualRgn

指定した領域が、 CRgn オブジェクトに格納されている領域と等しいかどうかを判断します。

BOOL EqualRgn(CRgn* pRgn) const;

パラメーター

pRgn
リージョンを識別します。

戻り値

2 つの領域が等しい場合は 0 以外。それ以外の場合は 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 オブジェクトは、アプリケーションがイベント ループで次にアイドル時間を過ぎ、その時点ですべての一時グラフィック オブジェクトが削除されるまでのみ有効です。 もう 1 つの言い方は、一時オブジェクトが 1 つのウィンドウ メッセージの処理中にのみ有効であるという点です。

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
ポイントの x 座標左または右に移動する単位の数を指定します。 点の y 座標上または下に移動する単位数を指定します。 point パラメーターには、POINT構造体またはCPoint オブジェクトのいずれかを指定できます。

戻り値

新しいリージョンの種類。 次のいずれかの値を指定できます。

  • COMPLEXREGION 領域には、重複する境界線があります。

  • ERROR リージョン ハンドルが無効です。

  • NULLREGION リージョンが空です。

  • SIMPLEREGION リージョンには、重複する罫線はありません。

解説

この関数は、領域 x 単位を x 軸に沿って移動し、 y 単位を y 軸に沿って移動します。

領域の座標値は、32,767 以下で、-32,768 以上である必要があります。 xyのパラメーターは、無効な領域座標を防ぐために慎重に選択する必要があります。

CRgn::CreateEllipticRgn の例を参照してください。

CRgn::operator HRGN

CRgn オブジェクトのアタッチされた Windows GDI ハンドルを取得するには、この演算子を使用します。

operator HRGN() const;

戻り値

成功した場合は、 CRgn オブジェクトによって表される Windows GDI オブジェクトへのハンドル。それ以外の場合は NULL。

解説

この演算子は、HRGN オブジェクトの直接使用をサポートするキャスト演算子です。

グラフィック オブジェクトの使用の詳細については、Windows SDK の Graphic Objects に関する記事を参照してください。

CRgn::P tInRegion

x および y によって指定されたポイントが、CRgn オブジェクトに格納されている領域にあるかどうかを確認します。

BOOL PtInRegion(
    int x,
    int y) const;

BOOL PtInRegion(POINT point) const;

パラメーター

x
テストするポイントの論理 x 座標を指定します。

y
テストする点の論理 y 座標を指定します。

point
点の x 座標と y 座標値をテストする点の x 座標と y 座標を指定します。 point パラメーターには、POINT構造体またはCPoint オブジェクトを指定できます。

戻り値

ポイントが領域内にある場合は 0 以外。それ以外の場合は 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 以外。それ以外の場合は 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 オブジェクトに格納されている領域に割り当てられた領域を使用します。 つまり、 CRgn オブジェクトは、 SetRectRgnを呼び出す前に、有効な Windows リージョンで既に初期化されている必要があります。 x1、y1、x2、および y2 によって指定割り当てられた領域の最小サイズを指定します。

ローカル メモリ マネージャーの呼び出しを回避するには、 CreateRectRgn メンバー関数の代わりにこの関数を使用します。

関連項目

CWnd クラス
階層図