+ ULONG ulCount = 1; // Number of polygons.
+ POLYGON vPlgn; // polygon.
+ ULONG flOptions = 0L; // Drawing options.
+
+//////////////////////////////////////////////////////////////////////////////
+// This contains fields of option bits... to draw boundary lines as well as
+// the area interior.
+//
+// Drawing boundary lines:
+// POLYGON_NOBOUNDARY Does not draw boundary lines.
+// POLYGON_BOUNDARY Draws boundary lines (the default).
+//
+// Construction of the area interior:
+// POLYGON_ALTERNATE Constructs interior in alternate mode
+// (the default).
+// POLYGON_WINDING Constructs interior in winding mode.
+//////////////////////////////////////////////////////////////////////////////
+
+ ULONG flModel = 0L; // Drawing model.
+
+//////////////////////////////////////////////////////////////////////////////
+// Drawing model.
+// POLYGON_INCL Fill is inclusive of bottom right (the default).
+// POLYGON_EXCL Fill is exclusive of bottom right.
+// This is provided to aid migration from other graphics models.
+//////////////////////////////////////////////////////////////////////////////
+
+ LONG lHits = 0L; // Correlation/error indicator.
+ POINTL vPoint;
+ int i;
+ int nIsTRANSPARENT = 0;
+ LONG lBorderColor = 0L;
+ LONG lColor = 0L;
+
+ lBorderColor = m_pen.GetColour().GetPixel();
+ lColor = m_brush.GetColour().GetPixel();
+ if(m_brush.GetStyle() == wxTRANSPARENT)
+ nIsTRANSPARENT = 1;
+
+ vPlgn.ulPoints = n;
+ vPlgn.aPointl = (POINTL*) calloc( n + 1
+ ,sizeof(POINTL)
+ ); // well, new will call malloc
+
+ for(i = 0; i < n; i++)
+ {
+ vPlgn.aPointl[i].x = vPoints[i].x; // +xoffset;
+ vPlgn.aPointl[i].y = vPoints[i].y; // +yoffset;
+ }
+ flModel = POLYGON_BOUNDARY;
+ if(nFillStyle == wxWINDING_RULE)
+ flModel |= POLYGON_WINDING;
+ else
+ flModel |= POLYGON_ALTERNATE;
+
+ vPoint.x = vXoffset;
+ vPoint.y = vYoffset;
+
+ ::GpiSetColor(m_hPS, lBorderColor);
+ ::GpiMove(m_hPS, &vPoint);
+ lHits = ::GpiPolygons(m_hPS, ulCount, &vPlgn, flOptions, flModel);
+ free(vPlgn.aPointl);