CRgn::CreatePolygonRgn
更新 : 2007 年 11 月
多角形の領域を作成します。
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
パラメータ
lpPoints
POINT 構造体の配列または CPoint オブジェクトの配列へのポインタ。各構造体は、多角形の 1 つの頂点の x 座標と y 座標を指定します。POINT 構造体は次の形式を持っています。typedef struct tagPOINT {
int x;
} POINT;
nCount
lpPoints で指定された POINT 構造体配列または CPoint オブジェクト配列の要素数を指定します。nMode
領域の塗りつぶしモードを指定します。このパラメータへは、ALTERNATE または WINDING のいずれかを指定できます。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
必要に応じて、システムは最後の頂点と最初の頂点を線分で結ぶことによって、多角形を自動的に閉じます。作成された領域は、CRgn オブジェクトに格納されます。
領域のサイズは、論理単位で 32,767 × 32,767、または 64K のメモリのいずれか小さい方で制限されます。
多角形塗りつぶしモードが ALTERNATE のとき、システムは各スキャン ライン上の多角形の奇数辺と偶数辺との間の領域を塗りつぶします。つまり、最初の辺と次の辺の間、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 );
必要条件
ヘッダー : afxwin.h