CRgn::CreatePolygonRgn
crea una región poligonal.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
Parámetros
lpPoints
Señala a una matriz de estructuras de puntos o a una matriz de los objetos de CPoint . Cada estructura especifica la coordenada x y la coordenada y de un vértice del polígono. La estructura de puntos tiene el siguiente formato:typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Especifica el número de estructuras de puntos u objetos de CPoint en la matriz indicada por lpPoints.nMode
Especifica el modo de relleno para la región. este parámetro puede ser Alternar o WINDING.
Valor devuelto
Distinto de cero si la operación se realizó correctamente; si no 0.
Comentarios
El sistema cierra el polígono automáticamente en caso necesario, debe dibujar una línea de vértices pasado al primero. la región resultante se almacena en el objeto de CRgn .
El tamaño de una región está limitado a 32.767 por 32.767 unidades lógicas o a de memoria de, lo que sea menor.
Cuando el modo de polígono-relleno es Alternar, el sistema rellenará el área entre los lados con números impares y pares de polígono en cada línea de análisis. Es decir, el sistema rellenará el área entre el primer y segundo lado, entre el tercero y cuarto lado, y así sucesivamente.
Cuando el modo de polígono-relleno es WINDING, el sistema utiliza la dirección en la que una figura se dibuja para determinar si rellenar un área. Cada segmento de línea en un polígono se dibuja en una dirección a la derecha o a la izquierda. Siempre que una línea imaginaria extraída de un área incluye el fuera de una figura pasa a través de un segmento de línea a la derecha, se incrementa un recuento. cuando la línea pasa a través de un segmento de línea a la izquierda, se disminuye el recuento. Se rellenará el área si el número es distinto de cero cuando la línea alcanza fuera de la figura.
Cuando una aplicación ha terminado de utilizar una región creada con la función de CreatePolygonRgn , debe seleccionar la región fuera del contexto de dispositivo y utilizar la función de DeleteObject para quitarlo.
Ejemplo
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
encabezado: afxwin.h