|
||||
GdiGradientFillRectCategory: RectangleHits: 3229 Rating: (2.95) votes 600
Rate: 1-star 2-stars 3-stars 4-stars 5-stars
API Explanation
The GdiGradientFill function fills rectangle and triangle structures. Parameter Information Declare Function GdiGradientFillRect Lib "gdi32" Alias "GdiGradientFill" (ByVal hdc As Long, pVertex As _ TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As _ Long, ByVal dwMode As Long) As Long · hdc [in] Handle to the destination device context. · pVertex [in] Pointer to an array of TRIVERTEX structures that each define a triangle vertex. · dwNumVertex [in] The number of vertices in pVertex. · pMesh [in] Array of GRADIENT_TRIANGLE structures in triangle mode, or an array of GRADIENT_RECT structures in rectangle mode. · dwNumMesh [in] The number of elements (triangles or rectangles) in pMesh. · dwMode [in] Specifies gradient fill mode. This parameter can be one of the following values. GRADIENT_FILL_RECT_H In this mode, two endpoints describe a rectangle. The rectangle is defined to have a constant color (specified by the TRIVERTEX structure) for the left and right edges. GDI interpolates the color from the top to bottom edge and fills the interior. GRADIENT_FILL_RECT_V In this mode, two endpoints describe a rectangle. The rectangle is defined to have a constant color (specified by the TRIVERTEX structure) for the top and bottom edges. GDI interpolates the color from the top to bottom edge and fills the interior. GRADIENT_FILL_TRIANGLE In this mode, an array of TRIVERTEX structures is passed to GDI along with a list of array indexes that describe separate triangles. GDI performs linear interpolation between triangle vertices and fills the interior. Drawing is done directly in 24- and 32-bpp modes. Dithering is performed in 16-, 8-, 4-, and 1-bpp mode. If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE.
Code
Private Type TRIVERTEX
x As Long y As Long Red As Integer 'Ushort value Green As Integer 'Ushort value Blue As Integer 'ushort value Alpha As Integer 'ushort End Type Private Type GRADIENT_RECT UpperLeft As Long 'In reality this is a UNSIGNED Long LowerRight As Long 'In reality this is a UNSIGNED Long End Type Const GRADIENT_FILL_RECT_H As Long = &H0 'In this mode, two endpoints describe a rectangle. The rectangle is 'defined to have a constant color (specified by the TRIVERTEX structure) for the left and right edges. GDI interpolates 'the color from the top to bottom edge and fills the interior. Const GRADIENT_FILL_RECT_V As Long = &H1 'In this mode, two endpoints describe a rectangle. The rectangle ' is defined to have a constant color (specified by the TRIVERTEX structure) for the top and bottom edges. GDI interpolates ' the color from the top to bottom edge and fills the interior. Const GRADIENT_FILL_TRIANGLE As Long = &H2 'In this mode, an array of TRIVERTEX structures is passed to GDI 'along with a list of array indexes that describe separate triangles. GDI performs linear interpolation between triangle vertices 'and fills the interior. Drawing is done directly in 24- and 32-bpp modes. Dithering is performed in 16-, 8.4-, and 1-bpp mode. Const GRADIENT_FILL_OP_FLAG As Long = &HFF Private Declare Function GdiGradientFillRect Lib "gdi32" Alias "GdiGradientFill" (ByVal hdc As Long, pVertex _ As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As _ Long, ByVal dwMode As Long) As Long Private Function LongToUShort(Unsigned As Long) As Integer 'A small function to convert from long to unsigned short LongToUShort = CInt(Unsigned - &H10000) End Function Private Sub Form_Load() 'API uses pixels Me.ScaleMode = vbPixels End Sub Private Sub Form_Paint() Dim vert(1) As TRIVERTEX Dim gRect As GRADIENT_RECT 'from black With vert(0) .x = 0 .y = 0 .Red = 0& .Green = 0& '&HFF& '0& .Blue = 0& .Alpha = 0& End With 'to red With vert(1) .x = Me.ScaleWidth .y = Me.ScaleHeight .Red = LongToUShort(&HFF00&) .Green = 0& .Blue = 0& .Alpha = 0& End With gRect.UpperLeft = 0 gRect.LowerRight = 1 GdiGradientFillRect Me.hdc, vert(0), 2, gRect, 1, GRADIENT_FILL_RECT_H End Sub |