CRgn::CreatePolyPolygonRgn
更新 : 2007 年 11 月
連続した閉じた多角形から成る領域を作成します。
BOOL CreatePolyPolygonRgn(
LPPOINT lpPoints,
LPINT lpPolyCounts,
int nCount,
int nPolyFillMode
);
パラメータ
lpPoints
多角形の頂点を定義した POINT 構造体の配列、または CPoint オブジェクトの配列へのポインタ。システムは各多角形を自動的には閉じないので、明示的に閉じる必要があります。多角形は連続的に指定されます。POINT 構造体は次の形式を持っています。typedef struct tagPOINT {
int x;
} POINT;
lpPolyCounts
整数の配列へのポインタ。最初の整数値は、lpPoints 配列内の最初の多角形の頂点の数、2 番目の整数値は 2 番目の多角形の頂点の数などのように指定していきます。nCount
lpPolyCounts 配列内の整数値の総数を指定します。nPolyFillMode
多角形塗りつぶしモードを指定します。この値は、ALTERNATE または WINDING のいずれかになります。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
作成された領域は、CRgn オブジェクトに格納されます。
多角形は、離れていても重なり合っていてもかまいません。
領域のサイズは、論理単位で 32,767 × 32,767、または 64K のメモリのいずれか小さい方で制限されます。
多角形塗りつぶしモードが ALTERNATE のとき、システムは各スキャン ライン上の多角形の奇数辺と偶数辺との間の領域を塗りつぶします。つまり、最初の辺と次の辺の間、3 番目の辺と 4 番目の辺の間、というように塗りつぶしていきます。
多角形塗りつぶしモードが WINDING のときは、システムは図形が描画されている方向を使用して、領域を塗りつぶすかどうかを判断します。多角形の各線分は時計回りか反時計回りに描画されます。閉じた領域から図形の外側へ向かって描画される仮想線が時計回りに描画された線分と交わるときは、カウントを増加します。線が反時計回りに描画された線分と交わるときは、カウントを減少します。線が図形の外側へ到達したときのカウントが 0 以外ならば、その領域を塗りつぶします。
CreatePolyPolygonRgn 関数を使って作成された領域を使い終わったときは、デバイス コンテキストから領域の選択を解除し、CGDIObject::DeleteObject メンバ関数で領域を削除します。
必要条件
ヘッダー : afxwin.h