CRgn クラスCRgn Class

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

構文Syntax

class CRgn : public CGdiObject

メンバーMembers

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

名前Name 説明Description
CRgn:: CRgnCRgn::CRgn CRgn オブジェクトを構築します。Constructs a CRgn object.

パブリック メソッドPublic Methods

名前Name 説明Description
CRgn:: CombineRgnCRgn::CombineRgn CRgn指定した2つのオブジェクトの和集合と等価になるようにオブジェクトを設定 CRgn します。Sets a CRgn object so that it is equivalent to the union of two specified CRgn objects.
CRgn:: CopyRgnCRgn::CopyRgn オブジェクトを、 CRgn 指定したオブジェクトのコピーであるように設定 CRgn します。Sets a CRgn object so that it is a copy of a specified CRgn object.
CRgn:: CreateEllipticRgnCRgn::CreateEllipticRgn CRgn楕円領域を使用してオブジェクトを初期化します。Initializes a CRgn object with an elliptical region.
CRgn:: CreateEllipticRgnIndirectCRgn::CreateEllipticRgnIndirect CRgn RECT構造体で定義された楕円領域を使用してオブジェクトを初期化します。Initializes a CRgn object with an elliptical region defined by a RECT structure.
CRgn:: CreateFromDataCRgn::CreateFromData 指定された領域と変換データから領域を作成します。Creates a region from the given region and transformation data.
CRgn:: CreateFromPathCRgn::CreateFromPath 指定されたデバイスコンテキストに選択されているパスから領域を作成します。Creates a region from the path that is selected into the given device context.
CRgn:: CreatePolygonRgnCRgn::CreatePolygonRgn CRgn多角形領域を使用してオブジェクトを初期化します。Initializes a CRgn object with a polygonal region. 必要に応じて、最後の頂点から最初の頂点までの線を描画することによって、多角形が自動的に閉じられます。The system closes the polygon automatically, if necessary, by drawing a line from the last vertex to the first.
CRgn:: CreatePolyPolygonRgnCRgn::CreatePolyPolygonRgn 一連の閉じた多角形で構成される領域を使用してオブジェクトを初期化 CRgn します。Initializes a CRgn object with a region consisting of a series of closed polygons. ポリゴンは、結合されていない場合もあれば、重なっている場合もあります。The polygons may be disjoint, or they may overlap.
CRgn:: CreateRectRgnCRgn::CreateRectRgn 四角形の CRgn 領域を使用してオブジェクトを初期化します。Initializes a CRgn object with a rectangular region.
CRgn:: CreateRectRgnIndirectCRgn::CreateRectRgnIndirect CRgn RECTstructure によって定義される四角形領域を使用してオブジェクトを初期化します。Initializes a CRgn object with a rectangular region defined by a RECTtructure.
CRgn:: CreateRoundRectRgnCRgn::CreateRoundRectRgn CRgn角が丸い四角形の領域を使用してオブジェクトを初期化します。Initializes a CRgn object with a rectangular region with rounded corners.
CRgn:: EqualRgnCRgn::EqualRgn 2つ CRgn のオブジェクトが等しいかどうかを確認します。Checks two CRgn objects to determine whether they are equivalent.
CRgn:: FromHandleCRgn::FromHandle CRgnWindows 領域へのハンドルが指定された場合に、オブジェクトへのポインターを返します。Returns a pointer to a CRgn object when given a handle to a Windows region.
CRgn:: GetRegionDataCRgn::GetRegionData 指定されたバッファーに、指定された領域を記述するデータを格納します。Fills the specified buffer with data describing the given region.
CRgn:: GetRgnBoxCRgn::GetRgnBox オブジェクトの外接する四角形の座標を取得し CRgn ます。Retrieves the coordinates of the bounding rectangle of a CRgn object.
CRgn:: OffsetRgnCRgn::OffsetRgn 指定し CRgn たオフセットだけオブジェクトを移動します。Moves a CRgn object by the specified offsets.
CRgn::P の実行領域CRgn::PtInRegion 指定した点が領域内にあるかどうかを判断します。Determines whether a specified point is in the region.
CRgn:: RectInRegionCRgn::RectInRegion 指定した四角形のいずれかの部分が領域の境界内にあるかどうかを判断します。Determines whether any part of a specified rectangle is within the boundaries of the region.
CRgn:: SetRectRgnCRgn::SetRectRgn CRgn指定された四角形領域にオブジェクトを設定します。Sets the CRgn object to the specified rectangular region.

パブリック演算子Public Operators

名前Name 説明Description
CRgn:: operator HRGNCRgn::operator HRGN オブジェクトに格納されている Windows ハンドルを返し CRgn ます。Returns the Windows handle contained in the CRgn object.

解説Remarks

Region は、ウィンドウ内の楕円または多角形の領域です。A region is an elliptical or polygonal area within a window. 領域を使用するには、クラスのメンバー関数を使用して、クラス CRgn のメンバーとして定義されているクリッピング関数を使用し CDC ます。To use regions, you use the member functions of class CRgn with the clipping functions defined as members of class CDC.

のメンバー関数は、 CRgn 呼び出される region オブジェクトに関する情報を作成、変更、および取得します。The member functions of CRgn create, alter, and retrieve information about the region object for which they are called.

の使用方法の詳細について CRgn は、「 グラフィックオブジェクト」を参照してください。For more information on using CRgn, see Graphic Objects.

継承階層Inheritance Hierarchy

CObjectCObject

CGdiObjectCGdiObject

CRgn

要件Requirements

ヘッダー: afxwin.hHeader: afxwin.h

CRgn:: CombineRgnCRgn::CombineRgn

2つの既存の領域を組み合わせることによって、新しい GDI 領域を作成します。Creates a new GDI region by combining two existing regions.

int CombineRgn(
    CRgn* pRgn1,
    CRgn* pRgn2,
    int nCombineMode);

パラメーターParameters

pRgn1pRgn1
既存の領域を識別します。Identifies an existing region.

pRgn2pRgn2
既存の領域を識別します。Identifies an existing region.

nCombineModenCombineMode
2つのソースリージョンを結合するときに実行する操作を指定します。Specifies the operation to be performed when combining the two source regions. 次のいずれかの値を指定できます。It can be any one of the following values:

  • RGN_AND では、両方の領域 (共通部分) の重なり合った領域を使用します。RGN_AND Uses overlapping areas of both regions (intersection).

  • RGN_COPY によって、リージョン 1 ( pRgn1 によって識別される) のコピーが作成されます。RGN_COPY Creates a copy of region 1 (identified by pRgn1).

  • RGN_DIFF は、領域 2 ( pRgn2 によって識別されます) の一部ではない領域 1 ( pRgn1 によって識別される) の領域で構成される領域を作成します。RGN_DIFF Creates a region consisting of the areas of region 1 (identified by pRgn1) that are not part of region 2 (identified by pRgn2).

  • RGN_OR は、両方の領域を完全に結合します (union)。RGN_OR Combines both regions in their entirety (union).

  • RGN_XOR は両方のリージョンを結合しますが、重複する領域は削除します。RGN_XOR Combines both regions but removes overlapping areas.

戻り値Return Value

結果として得られる領域の種類を指定します。Specifies the type of the resulting region. 次のいずれかの値を指定できます。It can be one of the following values:

  • COMPLEXREGION の新しい領域に重複する境界線があります。COMPLEXREGION New region has overlapping borders.

  • 新しいリージョンが作成されていません。ERROR No new region created.

  • NULLREGION の新しい領域が空です。NULLREGION New region is empty.

  • SIMPLEREGION の新しい領域には、重複する境界線がありません。SIMPLEREGION New region has no overlapping borders.

解説Remarks

これらの領域は、 nCombineMode によって指定されたとおりに組み合わされます。The regions are combined as specified by nCombineMode.

2つの指定された領域が結合され、結果として得られる領域ハンドルがオブジェクトに格納され CRgn ます。The two specified regions are combined, and the resulting region handle is stored in the CRgn object. したがって、オブジェクトに格納されているすべての領域が、結合され CRgn た領域に置き換えられます。Thus, whatever region is stored in the CRgn object is replaced by the combined region.

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

1つのリージョンを別のリージョンにコピーするには、 Copyrgn を使用します。Use CopyRgn to simply copy one region into another region.

Example

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:: CopyRgnCRgn::CopyRgn

Prgnsrc によって定義された領域をオブジェクトにコピーし CRgn ます。Copies the region defined by pRgnSrc into the CRgn object.

int CopyRgn(CRgn* pRgnSrc);

パラメーターParameters

pRgnSrcpRgnSrc
既存の領域を識別します。Identifies an existing region.

戻り値Return Value

結果として得られる領域の種類を指定します。Specifies the type of the resulting region. 次のいずれかの値を指定できます。It can be one of the following values:

  • COMPLEXREGION の新しい領域に重複する境界線があります。COMPLEXREGION New region has overlapping borders.

  • 新しいリージョンが作成されていません。ERROR No new region created.

  • NULLREGION の新しい領域が空です。NULLREGION New region is empty.

  • SIMPLEREGION の新しい領域には、重複する境界線がありません。SIMPLEREGION New region has no overlapping borders.

解説Remarks

以前にオブジェクトに格納されていた領域が新しい領域で置き換えられ CRgn ます。The new region replaces the region formerly stored in the CRgn object. この関数は、 CombineRgn メンバー関数の特殊なケースです。This function is a special case of the CombineRgn member function.

Example

CRgn:: CreateEllipticRgn」の例を参照してください。See the example for CRgn::CreateEllipticRgn.

CRgn:: CreateEllipticRgnCRgn::CreateEllipticRgn

楕円領域を作成します。Creates an elliptical region.

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

パラメーターParameters

x1x1
楕円の外接する四角形の左上隅の論理 x 座標を指定します。Specifies the logical x-coordinate of the upper-left corner of the bounding rectangle of the ellipse.

y1y1
楕円の外接する四角形の左上隅の論理 y 座標を指定します。Specifies the logical y-coordinate of the upper-left corner of the bounding rectangle of the ellipse.

×x2
楕円の外接する四角形の右下隅の論理 x 座標を指定します。Specifies the logical x-coordinate of the lower-right corner of the bounding rectangle of the ellipse.

y2y2
楕円の外接する四角形の右下隅の論理 y 座標を指定します。Specifies the logical y-coordinate of the lower-right corner of the bounding rectangle of the ellipse.

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation succeeded; otherwise 0.

解説Remarks

領域は、 x1y1x2、および y2 によって指定された外接する四角形によって定義されます。The region is defined by the bounding rectangle specified by x1, y1, x2, and y2. 領域はオブジェクトに格納され CRgn ます。The region is stored in the CRgn object.

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

関数で作成された領域の使用が完了したら CreateEllipticRgn 、アプリケーションはデバイスコンテキストからリージョンを選択し、関数を使用してその領域を削除する必要があり DeleteObject ます。When it has finished using a region created with the CreateEllipticRgn function, an application should select the region out of the device context and use the DeleteObject function to remove it.

Example

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:: CreateEllipticRgnIndirectCRgn::CreateEllipticRgnIndirect

楕円領域を作成します。Creates an elliptical region.

BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);

パラメーターParameters

lpRectlpRect
RECT CRect 楕円の外接する四角形の左上隅と右下隅の論理座標を格納している構造体またはオブジェクトを指します。Points to a RECT structure or a CRect object that contains the logical coordinates of the upper-left and lower-right corners of the bounding rectangle of the ellipse.

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation succeeded; otherwise 0.

解説Remarks

領域は、 lpRect が指す構造体またはオブジェクトによって定義され、オブジェクトに格納され CRgn ます。The region is defined by the structure or object pointed to by lpRect and is stored in the CRgn object.

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

関数で作成された領域の使用が完了したら CreateEllipticRgnIndirect 、アプリケーションはデバイスコンテキストからリージョンを選択し、関数を使用してその領域を削除する必要があり DeleteObject ます。When it has finished using a region created with the CreateEllipticRgnIndirect function, an application should select the region out of the device context and use the DeleteObject function to remove it.

Example

CRgn:: CreateRectRgnIndirect」の例を参照してください。See the example for CRgn::CreateRectRgnIndirect.

CRgn:: CreateFromDataCRgn::CreateFromData

指定された領域と変換データから領域を作成します。Creates a region from the given region and transformation data.

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

パラメーターParameters

lpXFormlpXForm
領域で実行される変換を定義する、 XFORMata 構造体を指します。Points to an XFORMata structure that defines the transformation to be performed on the region. このポインターが NULL の場合、id 変換が使用されます。If this pointer is NULL, the identity transformation is used.

nCountnCount
Prgndata が指すバイト数を指定します。Specifies the number of bytes pointed to by pRgnData.

pRgnDatapRgnData
領域データを格納する Rgndata 構造体を指します。Points to a RGNDATA data structure that contains the region data.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

アプリケーションは、関数を呼び出すことによって、領域のデータを取得でき CRgn::GetRegionData ます。An application can retrieve data for a region by calling the CRgn::GetRegionData function.

CRgn:: CreateFromPathCRgn::CreateFromPath

指定されたデバイスコンテキストに選択されているパスから領域を作成します。Creates a region from the path that is selected into the given device context.

BOOL CreateFromPath(CDC* pDC);

パラメーターParameters

pDCpDC
閉じたパスを含むデバイスコンテキストを識別します。Identifies a device context that contains a closed path.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

PDC パラメーターで識別されるデバイスコンテキストには、閉じたパスが含まれている必要があります。The device context identified by the pDC parameter must contain a closed path. CreateFromPath パスを領域に変換した後、Windows はデバイスコンテキストから閉じたパスを破棄します。After CreateFromPath converts a path into a region, Windows discards the closed path from the device context.

CRgn:: CreatePolygonRgnCRgn::CreatePolygonRgn

多角形領域を作成します。Creates a polygonal region.

BOOL CreatePolygonRgn(
    LPPOINT lpPoints,
    int nCount,
    int nMode);

パラメーターParameters

lpPointslpPoints
構造体の配列、 POINT またはオブジェクトの配列を指し CPoint ます。Points to an array of POINT structures or an array of CPoint objects. 各構造体は、多角形の1つの頂点の x 座標と y 座標を指定します。Each structure specifies the x-coordinate and y-coordinate of one vertex of the polygon. POINT構造体の形式は次のとおりです。The POINT structure has the following form:

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

nCountnCount
POINTLpPoints が指す配列内の構造体またはオブジェクトの数を指定し CPoint ます。 Specifies the number of POINT structures or CPoint objects in the array pointed to by lpPoints.

EvaluationmodenMode
領域の塗りつぶしモードを指定します。Specifies the filling mode for the region. このパラメーターには、代替またはワインディングを使用できます。This parameter may be either ALTERNATE or WINDING.

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation succeeded; otherwise 0.

解説Remarks

必要に応じて、最後の頂点から最初の頂点までの線を描画することによって、多角形が自動的に閉じられます。The system closes the polygon automatically, if necessary, by drawing a line from the last vertex to the first. 結果として得られる領域は、オブジェクトに格納され CRgn ます。The resulting region is stored in the CRgn object.

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

多角形の塗りつぶしモードが別の場合、システムは各スキャン行の奇数と偶数の多角形の辺の間に領域を塗りつぶします。When the polygon-filling mode is ALTERNATE, the system fills the area between odd-numbered and even-numbered polygon sides on each scan line. つまり、システムによって、最初と2番目の側、3番目と4番目の側の間の領域が塗りつぶされます。That is, the system fills the area between the first and second side, between the third and fourth side, and so on.

多角形入力モードがワインディングの場合、システムは、図形が描画された方向を使用して、領域を塗りつぶすかどうかを判断します。When the polygon-filling mode is WINDING, the system uses the direction in which a figure was drawn to determine whether to fill an area. 多角形の各線分は、時計回りまたは反時計回りの方向に描画されます。Each line segment in a polygon is drawn in either a clockwise or a counterclockwise direction. 囲まれた領域から図形の外側に描画された虚数線が時計回りの直線セグメントを通過するたびに、カウントがインクリメントされます。Whenever an imaginary line drawn from an enclosed area to the outside of a figure passes through a clockwise line segment, a count is incremented. 直線が反時計回りに直線セグメントを通過すると、カウントがデクリメントされます。When the line passes through a counterclockwise line segment, the count is decremented. 線が図形の外側に到達したときに、その数が0以外の場合、領域は塗りつぶされます。The area is filled if the count is nonzero when the line reaches the outside of the figure.

関数で作成された領域を使用してアプリケーションが終了したら、デバイスコンテキストからリージョンを選択し、関数を使用してその領域を CreatePolygonRgn 削除する必要があり DeleteObject ます。When an application has finished using a region created with the CreatePolygonRgn function, it should select the region out of the device context and use the DeleteObject function to remove it.

Example

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:: CreatePolyPolygonRgnCRgn::CreatePolyPolygonRgn

一連の閉じた多角形で構成される領域を作成します。Creates a region consisting of a series of closed polygons.

BOOL CreatePolyPolygonRgn(
    LPPOINT lpPoints,
    LPINT lpPolyCounts,
    int nCount,
    int nPolyFillMode);

パラメーターParameters

lpPointslpPoints
構造体の配列、 POINT または CPoint 多角形の頂点を定義するオブジェクトの配列を指します。Points to an array of POINT structures or an array of CPoint objects that defines the vertices of the polygons. 各ポリゴンは、システムによって自動的に閉じられないため、明示的に閉じる必要があります。Each polygon must be explicitly closed because the system does not close them automatically. 多角形は連続して指定されます。The polygons are specified consecutively. POINT構造体の形式は次のとおりです。The POINT structure has the following form:

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

lpPolyCountslpPolyCounts
整数の配列を指します。Points to an array of integers. 最初の整数は、 lpPoints 配列内の最初の多角形の頂点の数を指定し、2番目の整数は2番目の多角形の頂点の数を指定します。The first integer specifies the number of vertices in the first polygon in the lpPoints array, the second integer specifies the number of vertices in the second polygon, and so on.

nCountnCount
LpPolyCounts 配列内の整数の合計数を指定します。Specifies the total number of integers in the lpPolyCounts array.

nPolyFillModenPolyFillMode
多角形入力モードを指定します。Specifies the polygon-filling mode. この値には、代替またはワインディングを使用できます。This value may be either ALTERNATE or WINDING.

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation succeeded; otherwise 0.

解説Remarks

結果として得られる領域は、オブジェクトに格納され CRgn ます。The resulting region is stored in the CRgn object.

ポリゴンは、結合されていない場合もあれば、重なっている場合もあります。The polygons may be disjoint, or they may overlap.

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

多角形の塗りつぶしモードが別の場合、システムは各スキャン行の奇数と偶数の多角形の辺の間に領域を塗りつぶします。When the polygon-filling mode is ALTERNATE, the system fills the area between odd-numbered and even-numbered polygon sides on each scan line. つまり、システムによって、最初と2番目の側、3番目と4番目の側の間の領域が塗りつぶされます。That is, the system fills the area between the first and second side, between the third and fourth side, and so on.

多角形入力モードがワインディングの場合、システムは、図形が描画された方向を使用して、領域を塗りつぶすかどうかを判断します。When the polygon-filling mode is WINDING, the system uses the direction in which a figure was drawn to determine whether to fill an area. 多角形の各線分は、時計回りまたは反時計回りの方向に描画されます。Each line segment in a polygon is drawn in either a clockwise or a counterclockwise direction. 囲まれた領域から図形の外側に描画された虚数線が時計回りの直線セグメントを通過するたびに、カウントがインクリメントされます。Whenever an imaginary line drawn from an enclosed area to the outside of a figure passes through a clockwise line segment, a count is incremented. 直線が反時計回りに直線セグメントを通過すると、カウントがデクリメントされます。When the line passes through a counterclockwise line segment, the count is decremented. 線が図形の外側に到達したときに、その数が0以外の場合、領域は塗りつぶされます。The area is filled if the count is nonzero when the line reaches the outside of the figure.

関数で作成された領域を使用してアプリケーションが終了したら CreatePolyPolygonRgn 、デバイスコンテキストからリージョンを選択し、 CGDIObject::D eleteobject メンバー関数を使用して削除します。When an application has finished using a region created with the CreatePolyPolygonRgn function, it should select the region out of the device context and use the CGDIObject::DeleteObject member function to remove it.

CRgn:: CreateRectRgnCRgn::CreateRectRgn

オブジェクトに格納されている四角形の領域を作成し CRgn ます。Creates a rectangular region that is stored in the CRgn object.

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

パラメーターParameters

x1x1
領域の左上隅の論理 x 座標を指定します。Specifies the logical x-coordinate of the upper-left corner of the region.

y1y1
領域の左上隅の論理 y 座標を指定します。Specifies the logical y-coordinate of the upper-left corner of the region.

×x2
領域の右下隅の論理 x 座標を指定します。Specifies the logical x-coordinate of the lower-right corner of the region.

y2y2
領域の右下隅の論理 y 座標を指定します。Specifies the logical y-coordinate of the lower-right corner of the region.

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation succeeded; otherwise 0.

解説Remarks

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

によって作成された領域の使用が完了したら CreateRectRgn 、アプリケーションは CGDIObject::D eleteobject メンバー関数を使用して領域を削除する必要があります。When it has finished using a region created by CreateRectRgn, an application should use the CGDIObject::DeleteObject member function to remove the region.

Example

CRgn   rgn;

BOOL bSucceeded = rgn.CreateRectRgn( 50, 20, 150, 120 );
ASSERT( bSucceeded == TRUE );

その他の例については、「 CRgn:: CombineRgn」を参照してください。For an additional example, see CRgn::CombineRgn.

CRgn:: CreateRectRgnIndirectCRgn::CreateRectRgnIndirect

オブジェクトに格納されている四角形の領域を作成し CRgn ます。Creates a rectangular region that is stored in the CRgn object.

BOOL CreateRectRgnIndirect(LPCRECT lpRect);

パラメーターParameters

lpRectlpRect
RECT CRect 領域の左上隅と右下隅の論理座標を格納している構造体またはオブジェクトを指します。Points to a RECT structure or CRect object that contains the logical coordinates of the upper-left and lower-right corners of the region. RECT構造体の形式は次のとおりです。The RECT structure has the following form:

typedef struct tagRECT {
    int left;
    int top;
    int right;
    int bottom;
} RECT;

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation succeeded; otherwise 0.

解説Remarks

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

によって作成された領域の使用が完了したら CreateRectRgnIndirect 、アプリケーションは CGDIObject::D eleteobject メンバー関数を使用して領域を削除する必要があります。When it has finished using a region created by CreateRectRgnIndirect, an application should use the CGDIObject::DeleteObject member function to remove the region.

Example

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:: CreateRoundRectRgnCRgn::CreateRoundRectRgn

オブジェクトに格納されている角が丸い四角形の領域を作成し CRgn ます。Creates a rectangular region with rounded corners that is stored in the CRgn object.

BOOL CreateRoundRectRgn(
    int x1,
    int y1,
    int x2,
    int y2,
    int x3,
    int y3);

パラメーターParameters

x1x1
領域の左上隅の論理 x 座標を指定します。Specifies the logical x-coordinate of the upper-left corner of the region.

y1y1
領域の左上隅の論理 y 座標を指定します。Specifies the logical y-coordinate of the upper-left corner of the region.

×x2
領域の右下隅の論理 x 座標を指定します。Specifies the logical x-coordinate of the lower-right corner of the region.

y2y2
領域の右下隅の論理 y 座標を指定します。Specifies the logical y-coordinate of the lower-right corner of the region.

x3x3
丸みのある角を作成するために使用する楕円の幅を指定します。Specifies the width of the ellipse used to create the rounded corners.

y3y3
丸みのある角を作成するために使用する楕円の高さを指定します。Specifies the height of the ellipse used to create the rounded corners.

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation succeeded; otherwise 0.

解説Remarks

領域のサイズは、32767論理ユニットまたは 64 k のメモリのうち、いずれか小さい方の32767に制限されます。The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.

関数で作成された領域を使用してアプリケーションが終了したら CreateRoundRectRgn 、デバイスコンテキストからリージョンを選択し、 CGDIObject::D eleteobject メンバー関数を使用して削除します。When an application has finished using a region created with the CreateRoundRectRgn function, it should select the region out of the device context and use the CGDIObject::DeleteObject member function to remove it.

Example

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:: CRgnCRgn::CRgn

CRgn オブジェクトを構築します。Constructs a CRgn object.

CRgn();

解説Remarks

m_hObjectオブジェクトが他の1つ以上のメンバー関数で初期化されるまで、データメンバーに有効な WINDOWS GDI 領域が含まれていません CRgnThe m_hObject data member does not contain a valid Windows GDI region until the object is initialized with one or more of the other CRgn member functions.

Example

CRgn:: CreateRoundRectRgn」の例を参照してください。See the example for CRgn::CreateRoundRectRgn.

CRgn:: EqualRgnCRgn::EqualRgn

指定された領域が、オブジェクトに格納されている領域と等しいかどうかを判断し CRgn ます。Determines whether the given region is equivalent to the region stored in the CRgn object.

BOOL EqualRgn(CRgn* pRgn) const;

パラメーターParameters

pRgnpRgn
リージョンを識別します。Identifies a region.

戻り値Return Value

2つの領域が等しい場合は0以外の。それ以外の場合は0です。Nonzero if the two regions are equivalent; otherwise 0.

Example

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:: FromHandleCRgn::FromHandle

CRgnWindows 領域へのハンドルが指定された場合に、オブジェクトへのポインターを返します。Returns a pointer to a CRgn object when given a handle to a Windows region.

static CRgn* PASCAL FromHandle(HRGN hRgn);

パラメーターParameters

hRgnhRgn
Windows 領域へのハンドルを指定します。Specifies a handle to a Windows region.

戻り値Return Value

CRgn オブジェクトを指すポインターです。A pointer to a CRgn object. 関数が成功しなかった場合、戻り値は NULL になります。If the function was not successful, the return value is NULL.

解説Remarks

CRgnオブジェクトがハンドルにまだアタッチされていない場合は、一時 CRgn オブジェクトが作成され、アタッチされます。If a CRgn object is not already attached to the handle, a temporary CRgn object is created and attached. この一時 CRgn オブジェクトは、アプリケーションが次にそのイベントループ内でアイドル状態になったときにのみ有効です。その時点で、すべての一時グラフィックオブジェクトが削除されます。This temporary CRgn object is valid only until the next time the application has idle time in its event loop, at which time all temporary graphic objects are deleted. 別の方法として、一時オブジェクトは1つのウィンドウメッセージの処理中にのみ有効であるということもあります。Another way of saying this is that the temporary object is only valid during the processing of one window message.

CRgn:: GetRegionDataCRgn::GetRegionData

領域を記述するデータを指定したバッファーに格納します。Fills the specified buffer with data describing the region.

int GetRegionData(
    LPRGNDATA lpRgnData,
    int nCount) const;

パラメーターParameters

lpRgnDatalpRgnData
情報を受け取る Rgndata 構造体を指します。Points to a RGNDATA data structure that receives the information. このパラメーターが NULL の場合、戻り値には、領域データに必要なバイト数が含まれます。If this parameter is NULL, the return value contains the number of bytes needed for the region data.

nCountnCount
LpRgnData バッファーのサイズ (バイト単位) を指定します。Specifies the size, in bytes, of the lpRgnData buffer.

戻り値Return Value

関数が成功し、 nCount に適切なバイト数が指定されている場合、戻り値は常に ncount になります。If the function succeeds and nCount specifies an adequate number of bytes, the return value is always nCount. 関数が失敗した場合、または nCount が適切なバイト数より少ない場合、戻り値は 0 (error) になります。If the function fails, or if nCount specifies less than adequate number of bytes, the return value is 0 (error).

解説Remarks

このデータには、領域を構成する四角形の寸法が含まれます。This data includes the dimensions of the rectangles that make up the region. この関数は、関数と組み合わせて使用され CRgn::CreateFromData ます。This function is used in conjunction with the CRgn::CreateFromData function.

CRgn:: GetRgnBoxCRgn::GetRgnBox

オブジェクトの外接する四角形の座標を取得し CRgn ます。Retrieves the coordinates of the bounding rectangle of the CRgn object.

int GetRgnBox(LPRECT lpRect) const;

パラメーターParameters

lpRectlpRect
RECT CRect 外接する四角形の座標を受け取る構造体またはオブジェクトを指します。Points to a RECT structure or CRect object to receive the coordinates of the bounding rectangle. RECT構造体の形式は次のとおりです。The RECT structure has the following form:

typedef struct tagRECT {

int left;

int top;

int right;

int bottom;

} RECT;

戻り値Return Value

領域の種類を指定します。Specifies the region's type. 次のいずれかの値を指定できます。It can be any of the following values:

  • COMPLEXREGION 領域に重複する境界線があります。COMPLEXREGION Region has overlapping borders.

  • NULLREGION 領域が空です。NULLREGION Region is empty.

  • エラー CRgn オブジェクトには有効なリージョンが指定されていません。ERROR CRgn object does not specify a valid region.

  • SIMPLEREGION Region には重複する境界線がありません。SIMPLEREGION Region has no overlapping borders.

Example

CRgn:: CreatePolygonRgn」の例を参照してください。See the example for CRgn::CreatePolygonRgn.

CRgn:: OffsetRgnCRgn::OffsetRgn

オブジェクトに格納されている領域を、 CRgn 指定したオフセットで移動します。Moves the region stored in the CRgn object by the specified offsets.

int OffsetRgn(
    int x,
    int y);

int OffsetRgn(POINT point);

パラメーターParameters

xx
左または右に移動する単位の数を指定します。Specifies the number of units to move left or right.

yy
上または下に移動する単位の数を指定します。Specifies the number of units to move up or down.

視点point
Point の x 座標は、左または右に移動する単位の数を指定します。The x-coordinate of point specifies the number of units to move left or right. ポイント の y 座標は、上または下に移動する単位の数を指定します。The y-coordinate of point specifies the number of units to move up or down. Point パラメーターには、 POINT 構造体またはオブジェクトを指定でき CPoint ます。The point parameter may be either a POINT structure or a CPoint object.

戻り値Return Value

新しい領域の型。The new region's type. 次のいずれかの値を指定できます。It can be any one of the following values:

  • COMPLEXREGION 領域に重複する境界線があります。COMPLEXREGION Region has overlapping borders.

  • エラー領域ハンドルが無効です。ERROR Region handle is not valid.

  • NULLREGION 領域が空です。NULLREGION Region is empty.

  • SIMPLEREGION Region には重複する境界線がありません。SIMPLEREGION Region has no overlapping borders.

解説Remarks

関数は、y 軸に沿って x 軸と y 単位に沿って領域の x 単位を移動します。The function moves the region x units along the x-axis and y units along the y-axis.

領域の座標値は、32767以下かつ-32768 以上である必要があります。The coordinate values of a region must be less than or equal to 32,767 and greater than or equal to -32,768. 無効な領域の座標を防ぐために、 x および y パラメーターを慎重に選択する必要があります。The x and y parameters must be carefully chosen to prevent invalid region coordinates.

Example

CRgn:: CreateEllipticRgn」の例を参照してください。See the example for CRgn::CreateEllipticRgn.

CRgn:: operator HRGNCRgn::operator HRGN

オブジェクトのアタッチされた Windows GDI ハンドルを取得するには、この演算子を使用し CRgn ます。Use this operator to get the attached Windows GDI handle of the CRgn object.

operator HRGN() const;

戻り値Return Value

成功した場合は、オブジェクトによって表される Windows GDI オブジェクトへのハンドル CRgn 。それ以外の場合は NULL。If successful, a handle to the Windows GDI object represented by the CRgn object; otherwise NULL.

解説Remarks

この演算子は、HRGN オブジェクトの直接使用をサポートするキャスト演算子です。This operator is a casting operator, which supports direct use of an HRGN object.

グラフィックオブジェクトの使用方法の詳細については、Windows SDK の「 グラフィックオブジェクト 」を参照してください。For more information about using graphic objects, see the article Graphic Objects in the Windows SDK.

CRgn::P の実行領域CRgn::PtInRegion

Xy によって指定された点が、オブジェクトに格納されている領域内にあるかどうかを確認し CRgn ます。Checks whether the point given by x and y is in the region stored in the CRgn object.

BOOL PtInRegion(
    int x,
    int y) const;

BOOL PtInRegion(POINT point) const;

パラメーターParameters

xx
テストする点の論理 x 座標を指定します。Specifies the logical x-coordinate of the point to test.

yy
テストする点の論理 y 座標を指定します。Specifies the logical y-coordinate of the point to test.

視点point
の x 座標と y 座標は、値をテストする点の x 座標と y 座標を指定します。The x- and y-coordinates of point specify the x- and y-coordinates of the point to test the value of. Point パラメーターには、 POINT 構造体またはオブジェクトを指定でき CPoint ます。The point parameter can either be a POINT structure or a CPoint object.

戻り値Return Value

点が領域内にある場合は0以外の。それ以外の場合は0です。Nonzero if the point is in the region; otherwise 0.

CRgn:: RectInRegionCRgn::RectInRegion

LpRect によって指定された四角形のいずれかの部分が、オブジェクトに格納されている領域の境界内にあるかどうかを判断し CRgn ます。Determines whether any part of the rectangle specified by lpRect is within the boundaries of the region stored in the CRgn object.

BOOL RectInRegion(LPCRECT lpRect) const;

パラメーターParameters

lpRectlpRect
RECT構造体またはオブジェクトを指し CRect ます。Points to a RECT structure or CRect object. RECT構造体の形式は次のとおりです。The RECT structure has the following form:

typedef struct tagRECT {
    int left;
    int top;
    int right;
    int bottom;
} RECT;

戻り値Return Value

指定した四角形のいずれかの部分が領域の境界内にある場合は0以外の。それ以外の場合は0です。Nonzero if any part of the specified rectangle lies within the boundaries of the region; otherwise 0.

CRgn:: SetRectRgnCRgn::SetRectRgn

四角形の領域を作成します。Creates a rectangular region.

void SetRectRgn(
    int x1,
    int y1,
    int x2,
    int y2);

void SetRectRgn(LPCRECT lpRect);

パラメーターParameters

x1x1
四角形領域の左上隅の x 座標を指定します。Specifies the x-coordinate of the upper-left corner of the rectangular region.

y1y1
四角形領域の左上隅の y 座標を指定します。Specifies the y-coordinate of the upper-left corner of the rectangular region.

×x2
四角形領域の右下隅の x 座標を指定します。Specifies the x-coordinate of the lower-right corner of the rectangular region.

y2y2
四角形領域の右下隅の y 座標を指定します。Specifies the y-coordinate of the lower-right corner of the rectangular region.

lpRectlpRect
四角形の領域を指定します。Specifies the rectangular region. には、構造体またはオブジェクトへのポインターを指定でき RECT CRect ます。Can be either a pointer to a RECT structure or a CRect object.

解説Remarks

ただし、 CreateRectRgnとは異なり、ローカル Windows アプリケーションヒープから追加のメモリは割り当てられません。Unlike CreateRectRgn, however, it does not allocate any additional memory from the local Windows application heap. 代わりに、オブジェクトに格納されている領域に割り当てられた領域を使用し CRgn ます。Instead, it uses the space allocated for the region stored in the CRgn object. これは、を CRgn 呼び出す前に、オブジェクトが有効な Windows 領域を使用して既に初期化されている必要があることを意味 SetRectRgn します。This means that the CRgn object must already have been initialized with a valid Windows region before calling SetRectRgn. X1y1x2、および y2 によって指定されるポイントは、割り当てられた領域の最小サイズを指定します。The points given by x1, y1, x2, and y2 specify the minimum size of the allocated space.

CreateRectRgnローカルメモリマネージャーの呼び出しを回避するには、メンバー関数の代わりにこの関数を使用します。Use this function instead of the CreateRectRgn member function to avoid calls to the local memory manager.

関連項目See also

CWnd クラスCWnd Class
階層図Hierarchy Chart