CRgn::CreatePolygonRgn
多角形の領域を作成します。
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
パラメーター
lpPoints
[ポイント] の構造体の配列または CPoint のオブジェクトの配列へのポインター。 各構造体は多角形の 1 種類の頂点の x 座標と y 座標を指定します。 [ポイント] の構造体には、次の形式があります:typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
[ポイント] の構造体の数を指定します lpPointsまたは CPoint は、が指す配列に追加します。nMode
区分に対して塗りつぶしモードを指定します。 このパラメーターは ALTERNATE または WINDINGである場合があります。
戻り値
操作が成功する場合は、; それ以外の場合は 0。
解説
システムは、最後の頂点多角形を描画して、からの 1 番目の行を必要に応じて自動的に閉じます。 結果の領域は CRgn のオブジェクトに格納されます。
領域のサイズは 32,767 の論理単位またはメモリの 32,767 KB により小さい、どの場合でも、制限されます。
多角形塗りつぶしモードを ALTERNATEの場合、システムは各スキャン ラインの偶数と奇数の多角形の側との間で領域を塗りつぶします。 つまり、1 番目と 2 番目のサイド間の領域を、3 番目と 4 番目の間などで塗りつぶします。
多角形塗りつぶしモードを WINDINGの場合、システムは判断する領域を塗りつぶすに図を描画方向かどうかを使用します。 多角形の各線分が時計回りまたは反時計回りで描画されます。 かっこで囲まれた領域から図の外側に描画と行が時計回りの線分を通過するたびに、カウントがインクリメントされます。 行が左回りの線分を通過すると、カウントがデクリメントされます。 領域は、行が図の外部に到達すると、カウントがゼロ以外の場合は塗りつぶされます。
アプリケーションは 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 );
必要条件
ヘッダー: afxwin.h