CRgn::CreatePolygonRgn
Cria uma região poligonal.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
Parâmetros
lpPoints
Aponta para uma matriz de PONTO estruturas ou uma matriz de CPoint objetos. Cada estrutura Especifica a coordenada x e a coordenada y de um vértice do polígono.The PONTO estrutura tem a seguinte forma:typedef struct tagPOINT {
int x;
} POINT;
nCount
Especifica o número de PONTO estruturas de ou CPoint objetos na matriz apontada por lpPoints.nMode
Especifica o modo de preenchimento para a região.Este parâmetro pode ser qualquer um dos ALTERNATIVA or ENROLAMENTO.
Valor de retorno
Diferente de zero se a operação foi bem-sucedida; caso contrário, 0.
Comentários
O sistema fecha o polígono automaticamente, se necessário, desenhando uma linha do último vértice ao primeiro.A região resultante é armazenada na CRgn objeto.
O dimensionar de uma região é limitado a 64 K de memória ou de unidades lógicas de 32.767 a 32.767, o que for menor.
Quando o modo de preenchimento de polígono é ALTERNATIVA, o sistema preenche a área entre os lados do polígono ímpares e pares em cada linha de varredura.Ou seja, o sistema preenche a área entre o primeiro e o segundo lado, entre o terceiro e quarto lado e assim por diante.
Quando o modo de preenchimento de polígono é ENROLAMENTO, o sistema usa a direção em que uma figura foi desenhada para determinar se deve preencher uma área.Cada segmento de linha em um polígono é desenhado em um sentido horário ou sentido.Sempre que uma linha imaginária extraída de uma área fechada para fora de uma figura passa por um segmento de linha no sentido horário, uma contagem é incrementada.Quando a linha passa por um segmento de linha no sentido anti-horário, a contagem é diminuída.A área é preenchida se a contagem for diferente de zero quando a linha atinge fora da figura.
Quando um aplicativo terminou de usar uma região criada com o CreatePolygonRgn função, ele deve selecionar a região do contexto de dispositivo e use o DeleteObject função para removê-lo.
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