CRgn::CreatePolygonRgn
建立多邊形區域。
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
參數
lpPoints
物件的陣列 點 結構或陣列的點 CPoint 物件。每個結構各指定多邊形的端點 X 座標和 Y 座標。點 結構具有下列格式:typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
指定 點 結構數目或 CPoint 在 lpPoints點的陣列物件。nMode
指定區域這個填滿模式。這個參數可以是 ALTERNATE 或 WINDING。
傳回值
不是零,如果作業成功,則為 0。
備註
系統會繪製一條線,在必要時自動封閉多邊形,從最後一個端點加入至第一個。產生的區域會在 CRgn 物件儲存。
區域的大小限制為記憶體 32,767 x 32,767 個邏輯單位或 64K,視何者較小。
當多邊形填滿模式是 ALTERNATE時,系統會在填入偶數和奇數多邊形邊之間的區域中每條掃描線。也就是系統來填入中的第一個和第二個邊緣之間的區域,在第三和第四個邊緣之間,依此類推。
當多邊形填滿模式是 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 );
需求
Header: afxwin.h