CRgn::CreatePolygonRgn
Tworzy wielokątne regionu.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
Parametry
lpPoints
Punkty do tablicy punkt struktur lub tablica CPoint obiektów.Każda struktura Określa współrzędną x i współrzędna y jeden wierzchołek wielokąta.Punkt struktura ma następującą postać:typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Określa liczbę punkt struktur lub CPoint obiektów w tablicy wskazywanej przez lpPoints.nMode
Określa tryb napełniania regionu.Ten parametr może być alternatywne lub UZWOJENIE.
Wartość zwracana
Niezerowa, jeśli operacja powiodła się; 0 inaczej.
Uwagi
System zamyka Wielokąt automatycznie, jeśli to konieczne, rysując linię od wierzchołka ostatniej do pierwszej.Wynikowy regionu są przechowywane w CRgn obiektu.
Rozmiar regionu jest ograniczona do 32 767 przez 32 767 logiczne jednostki lub 64 K pamięci, jest mniejsze.
Gdy tryb Wielokąt wypełniania jest alternatywne, system wypełnia obszar między stron nieparzystych i parzystych Wielokąt w każdym wierszu skanowania.Oznacza to, że system wypełnia obszar, między pierwszym i drugim po stronie, między trzecim i czwartym stronie itd.
Gdy tryb Wielokąt wypełniania jest UZWOJENIE, system używa kierunek Sporządzono rysunek do ustalenia, czy wypełnianie obszaru.Każdego segmentu linii wielokąta jest rysowane zegara lub wskazówek zegara.Ilekroć umowną linią wyznaczoną z obszaru na zewnątrz rysunek przechodzi ruchem linia, licznik jest zwiększany.Gdy linia przechodzi przez segment linii zegara, licznik jest zmniejszany.Obszar jest wypełniany, jeśli liczba jest niezerowy, gdy wiersz osiągnie poza rysunek.
Gdy aplikacja zakończy regionu utworzonych za pomocą CreatePolygonRgn funkcji, to należy wybrać region out kontekstu urządzenia i wykorzystania DeleteObject funkcji go usunąć.
Przykład
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 );
Wymagania
Nagłówek: afxwin.h