CRgn クラス

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

構文

class CRgn : public CGdiObject

メンバー

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

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

パブリック メソッド

名前 説明
CRgn::CombineRgn 指定した CRgnCRgn 2 つのオブジェクトの和集合と等価になるようにオブジェクトを設定します。
CRgn::CopyRgn 指定したCRgnオブジェクトのCRgnコピーになるようにオブジェクトを設定します。
CRgn::CreateEllipticRgn 楕円領域を CRgn 使用してオブジェクトを初期化します。
CRgn::CreateEllipticRgnIndirect CRgn RECT 構造体によって定義された楕円領域を使用してオブジェクトを初期化します。
CRgn::CreateFromData 指定した領域と変換データからリージョンを作成します。
CRgn::CreateFromPath 指定されたデバイス コンテキストに選択されたパスからリージョンを作成します。
CRgn::CreatePolygonRgn 多角形領域を CRgn 使用してオブジェクトを初期化します。 必要に応じて、最後の頂点から最初の頂点までの線を描画することで、多角形が自動的に閉じられます。
CRgn::CreatePolyPolygonRgn CRgn閉じた一連のポリゴンで構成される領域を使用してオブジェクトを初期化します。 多角形は不整合であるか、重複している可能性があります。
CRgn::CreateRectRgn 四角形の領域を CRgn 使用してオブジェクトを初期化します。
CRgn::CreateRectRgnIndirect CRgn RECTtructure によって定義された四角形領域を使用してオブジェクトを初期化します。
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 オブジェクトに含まれる Windows ハンドルを CRgn 返します。

解説

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

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

使用のCRgn詳細については、「グラフィック オブジェクト」を参照してください

継承階層

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。

解説

領域は、x1、y1、x2、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
構造体の配列またはオブジェクトのPOINTCPoint配列を指します。 各構造体は、多角形の 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 以上である必要があります。 無効な領域座標を回避するには、x パラメーターと y パラメーターを慎重に選択する必要があります。

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

CRgn::operator HRGN

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

operator HRGN() const;

戻り値

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

解説

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

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

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 パラメーターには、構造体またはオブジェクトをPOINTCPoint指定できます。

戻り値

ポイントが領域内にある場合は 0 以外。それ以外の場合は 0。

CRgn::RectInRegion

lpRect指定された四角形の一部が、オブジェクトに格納されている領域の境界内にあるCRgnかどうかを判断します。

BOOL RectInRegion(LPCRECT lpRect) const;

パラメーター

lpRect
構造体またはCRectオブジェクトをRECT指します。 構造体の形式は 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 使用されます。 これは、オブジェクトが呼び出すSetRectRgn前にCRgn、有効な Windows リージョンで既に初期化されている必要があることを意味します。 x1、y1、x2、および y2 によって指定されるポイントは、割り当てられた領域の最小サイズを指定します。

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

関連項目

CWnd クラス
階層図