How to Use FillPolygonRgn API to Fill Shape in Visual BasicID: Q81470
|
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.
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
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.
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
Additional query words: 2.00 3.00
Keywords :
Version :
Platform :
Issue type :
Last Reviewed: June 23, 1999