Compartilhar via


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

Consulte também

Referência

CRgn Class

Gráfico de hierarquia

CRgn::CreatePolyPolygonRgn

CreatePolygonRgn