Condividi tramite


CRgn::CreatePolygonRgn

Crea un'area poligonale.

BOOL CreatePolygonRgn(
   LPPOINT lpPoints,
   int nCount,
   int nMode 
);

Parametri

  • lpPoints
    Punta a una matrice di strutture di punti o a una matrice di oggetti CPoint.Ogni struttura specifica la coordinata x e per la coordinata y del vertice del poligono.La struttura di punti ha il formato seguente:

    typedef struct tagPOINT {

    int x;

    int y;

    } POINT;

  • nCount
    Specifica il numero di strutture di punti o CPoint oggetti della matrice indicata da lpPoints.

  • nMode
    Specifica la modalità di riempimento per l'area.Questo parametro può essere ALTERNATE o WINDING.

Valore restituito

Diverso da zero se l'operazione ha esito positivo; in caso contrario 0.

Note

Il sistema chiude il poligono automaticamente se necessario, tracciando una linea dall'ultimo vertice al primo.L'area risultante viene memorizzata nell'oggetto CRgn.

La dimensione di un'area è limitata a 32.767 per 32.767 unità logiche o della memoria, le dimensioni inferiori.

Quando la modalità di riempimento poligoni è ALTERNATE, il sistema riempie l'area tra i lati di numero dispari e pari del poligono su ogni riga di digitalizzazione.Ovvero il sistema riempie l'area tra il primo e il secondo, tra terzo argomento e quarto lato, e così via.

Quando la modalità di riempimento poligoni è WINDING, il sistema utilizza la direzione in cui una figura è stata disegnata per determinare se riempire un'area.Ogni segmento di riga in un poligono viene disegnato in un senso antiorario in senso orario o.Ogni volta che una linea immaginaria tracciata da un'area all'esterno di una figura attraversa un segmento di riga in senso orario, un conteggio viene incrementato.Quando la riga passa attraverso un segmento di riga in senso antiorario, il numero viene decrementato.L'area viene soddisfatta quando il conteggio è diverso da zero quando raggiunge la riga al di fuori della figura.

Quando un'applicazione viene terminato l'utilizzo di un'area creata con la funzione CreatePolygonRgn, deve selezionare l'area dal contesto di dispositivo e utilizzare la funzione DeleteObject per rimuoverlo.

Esempio

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 );

Requisiti

Header: afxwin.h

Vedere anche

Riferimenti

Classe CRgn

Grafico della gerarchia

CRgn::CreatePolyPolygonRgn

CreatePolygonRgn