CRgn::CreatePolygonRgn
Crée une zone polygonale.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode
);
Paramètres
lpPoints
Pointe vers un tableau de structures de POINT ou un tableau d'objets d' CPoint . Chaque structure spécifie la coordonnée x et l'ordonnée d'un vertex de le polygone. La structure de POINT a la forme suivante :typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Spécifie le nombre de structures de POINT ou CPoint objets dans le tableau pointée pointe vers lpPoints.nMode
Spécifie le mode rassasiant pour la zone. Ce paramètre peut être ALTERNATE ou enroulement.
Valeur de retour
Une valeur différente de zéro si l'opération a réussi ; sinon 0.
Notes
Le système ferme le polygone automatiquement si nécessaire, en dessinant une ligne du dernier vertex au premier. La zone en résulte est stockée dans l'objet d' CRgn .
La taille d'une zone est limitée à 32.767 par 32.767 unités logiques ou ko à de mémoire, ce qui est plus petit.
Lorsque le mode de remplissage de polygones est ALTERNATE, le système qui remplit entre les côtés impairs et pairs polygon sur chaque ligne de numérisation. Autrement dit, le système qui remplit entre le premier et verso, entre le troisième et quatrième côté, et ainsi de suite.
Lorsque le mode de remplissage de polygones est enroulement, le système utilise la direction dans laquelle une illustration a été dessinée pour déterminer si remplir la zone. Chaque segment de ligne dans un polygone est dessiné dans un sens horaire ou anti-horaire. Chaque fois qu'une ligne imaginaire tracée d'une zone placé à l'extérieur d'une illustration traverse un segment de ligne horaire, un nombre est incrémenté. Lorsque la ligne traverse un segment de ligne dans le sens inverse des aiguilles d'une montre, le nombre est décrémenté. La zone est remplie si le nombre est différent de zéro lorsque la ligne atteint l'extérieur de l'illustration.
Lorsqu'une application a terminé d'utiliser une zone créée avec la fonction d' CreatePolygonRgn , elle doit sélectionner la zone en dehors de le contexte de périphérique et utiliser la fonction d' DeleteObject pour la supprimer.
Exemple
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 );
Configuration requise
Header: afxwin.h