CRgn クラス
Windows のグラフィック デバイス インターフェイス (GDI) の領域をカプセル化したものです。
構文
class CRgn : public CGdiObject
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CRgn::CRgn | CRgn オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CRgn::CombineRgn | 指定した CRgn CRgn 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
詳細については、「グラフィック オブジェクト」を参照してください。
継承階層
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
構造体の配列またはオブジェクトの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 以上である必要があります。 無効な領域座標を回避するには、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 パラメーターには、構造体またはオブジェクトをPOINT
CPoint
指定できます。
戻り値
ポイントが領域内にある場合は 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
メンバー関数の代わりにこの関数を使用します。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示