Partilhar via


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

Consulte também

Referência

Classe CRgn

Gráfico de hierarquia

CRgn::CreatePolyPolygonRgn

CreatePolygonRgn

Outros recursos

CRgn membros