Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


making polygons

Posted on 1998-09-03
Medium Priority
Last Modified: 2012-05-04
Is there an easy way to draw polygons At runtime?
Like MSPaint polygon tool, if so how.
Question by:bradsoblesky
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
LVL 14

Accepted Solution

waty earned 40 total points
ID: 1432993
Here is an article. You should adapt the declaration for use under Win32

How to Use FillPolygonRgn API to Fill Shape in Visual Basic
Last reviewed: June 21, 1995
Article ID: Q81470  
The information in this article applies to:
- Standard and Professional Editions of Microsoft Visual Basic for

  Windows, versions 2.0 and 3.0
- Microsoft Visual Basic programming system for Windows, version 1.0

Microsoft Visual Basic versions 2.0 and later for Windows include the Shape control which can be used for creating and filling six different geometric shapes. Alternatively, you can create a polygon region on a form or picture and fill it with a color, using the CreatePolygonRgn and FillRgn Windows API calls to draw and fill areas of the screen with color. Geometric shapes not provided with the Shape control, such as a triangle, can be created using this method.

More Information:

To draw a polygon on a form or picture control, you can use the Polygon API call; this will draw the edge of the polygon. You can then use CreatePolygonRgn to create an area that you can paint and use FillRgn to fill it with a color. Using these Windows API calls allows you to pick the points, the number of points, and to choose the color or brush to fill with.

The API calls used in the following example should be declared in the general Declarations section of your form. They are as follows:

API Call          Description
CreatePolygonRgn Creates a polygonal region

GetStockObject    Retrieves a handle to one of the predefined stock
                  pens, brushes, or fonts

FillRgn           Fills the region specified by the hRgn parameter
                  with the brush specified by the hBrush parameter

Polygon           Draws a polygon consisting of two or more points
                  connected by lines

Code Example
The following code example shows how to create a black triangle on a form. To change the program to create other shapes, add points to the array.

Run Visual Basic for Windows, or from the File menu, choose New Project (press ALT, F, N) if Visual Basic for Windows is already running. Form1 is created by default.

From the File menu, choose New Module (press ALT, F, M). Module1 is created by default.

Add the following code to the general declarations section of Module1 (in Visual Basic version 1.0 for Windows, add it to GLOBAL.BAS):

   Type Coord       ' This is the type structure for the x and y
      x As Integer  ' coordinates for the polygonal region.
      y As Integer
   End Type

   ' Enter each Declare statement as one, single line:
   Declare Function CreatePolygonRgn Lib "gdi" (lpPoints As Any,
      ByVal nCount As Integer, ByVal nPolyFillMode As Integer) As Integer
   Declare Function Polygon Lib "gdi" ByVal hDC As Integer,
      lpPoints As Any, ByVal nCount As Integer) As Integer
   Declare Function FillRgn Lib "gdi" (ByVal hDC As Integer,
      ByVal hRgn As Integer, ByVal hBrush As Integer) As Integer
   Declare Function GetStockObject Lib "gdi" (ByVal nIndex As Integer)
      As Integer
   Declare Function DeleteObject Lib "gdi" (ByVal hndobj As Integer)
      As Integer

   Global Const ALTERNATE = 1 ' ALTERNATE and WINDING are
   Global Const WINDING = 2   ' constants for FillMode.
   Global Const BLACKBRUSH = 4' Constant for brush type.

Add the following code to the Form_Click event for Form1:

   Sub Form_Click ()
      ' Dimension coordinate array.
      ReDim poly(1 To 3) As Coord
      ' Number of vertices in polygon.
      NumCoords% = 3
      ' Set scalemode to pixels to set up points of triangle.
      form1.scalemode = 3
      ' Assign values to points.
      poly(1).x = form1.scalewidth / 2
      poly(1).y = form1.scaleheight / 2
      poly(2).x = form1.scalewidth / 4
      poly(2).y = 3 * form1.scaleheight / 4
      poly(3).x = 3 * form1.scalewidth / 4
      poly(3).y = 3 * form1.scaleheight / 4
      ' Sets background color to red for contrast.
      form1.backcolor = &HFF
      ' Polygon function creates unfilled polygon on screen.
      ' Remark FillRgn statement to see results.
      bool% = Polygon(form1.hdc, poly(1), NumCoords%)
      ' Gets stock black brush.
      hbrush% = GetStockObject(BLACKBRUSH)
      ' Creates region to fill with color.
      hrgn% = CreatePolygonRgn(poly(1), NumCoords%, ALTERNATE)
      ' If the creation of the region was successful then color.
      If hrgn% Then bool% = FillRgn(form1.hdc, hrgn%, hbrush%)
      ' Print out some information.
      Print "FillRgn Return : ";bool%
      Print "HRgn : "; hrgn%
      Print "Hbrush : "; hbrush%
      Trash% = DeleteObject(hrgn%)
   End Sub

Run the program.

You should initially see a blank form. Click the form; a red background with a black triangle on it should be displayed. You can try different numbers of vertices by adding elements to the poly array and updating NumCoords. Different colors and brushes can be substituted as desired.
NOTE: If you try to fill a region with coordinates beyond the visible form, the CreatePolygonRgn function call will return a zero, meaning it was unsuccessful. The FillRgn will not work if the CreatePolygonRgn function was unsuccessful. All you will see is the outline created by the Polygon function. You should make certain that the vertices are all within the viewable form.



Featured Post

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Suggested Courses

604 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question