CRgn::CreatePolygonRgn
Cria uma região poligonal.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
Parâmetros
lpPoints
Aponta para um vetor de estruturas de POINT ou uma matriz de objetos de CPoint .Cada estrutura especifica a coordenada x e a coordenada y de um vértice polígono.A estrutura de POINT tem a seguinte forma:typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Especifica o número de estruturas de POINT ou CPoint objetos na matriz apontada por lpPoints.nMode
Especifica o modo de para preencher a área.Este parâmetro pode ser ALTERNATE ou WINDING.
Valor de retorno
Diferente de zero se a operação foi bem-sucedida; se não 0.
Comentários
O sistema fecha o polígonos automaticamente se necessário, desenhando uma linha de vértice o último para o primeiro.A região resultante é armazenada no objeto de CRgn .
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou a 64K de memória, qualquer é menor.
Quando o modo de polígono- preencher é ALTERNATE, o sistema preenche a área lado ímpares entre e numerados de numerados polygon em cada linha de verificação.Isto é, o sistema preenche a área entre o primeiro e segundo lado, entre o terceiro e quarto lado, e assim por diante.
Quando o modo de polígono- preencher é WINDING, o sistema usa a direção em que uma figura foi desenhada para determinar se preencher uma área.Cada segmento de linha em um polígono é desenhada no sentido horário ou sentido anti-horário.Sempre que uma linha imaginário desenhada de uma área englobada para fora de uma figura passa por um segmento de linha no sentido horário, uma contagem. é incrementadaQuando a linha passa por um segmento de linha anti-horário, a contagem está decrescida.A área é preenchida se o número for diferente de zero quando a linha chegar a fora da figura.
Quando um aplicativo tiver terminado de usar uma região criada com a função de CreatePolygonRgn , deve selecionar a região fora do contexto de dispositivo e usar a função de DeleteObject para removê-la.
Exemplo
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 );
Requisitos
Cabeçalho: afxwin.h