SET PROC TO ApiStructure && for the STRUCT class.
_SCREEN.LockScreen = .T.
DECLARE LONG GetDC ;
IN Win32api ;
LONG nhWnd
DECLARE LONG ReleaseDC ;
IN Win32api ;
LONG nhWnd, ;
LONG nhDC
LOCAL WHND,hDC,Depth,cRect,loRect
* WHND = FindWindow( _SCREEN.Caption )
* Use Spy++ to find your main VFP output window's handle here
* I haven't found a way yet to retrieve it.
whnd = 0x001204E4
hDC = GetDC( WHND )
DECLARE LONG GetClientRect IN User32.dll ;
LONG HWND_hWnd, STRING @ LPRECT_lpRect
loRec = CREATE('Struct_RECT')
cRect = loRec.Structure
GetClientRect(whnd, @cRect)
loRec.Structure = cRect
*// Use the rect coordinates to define a clipping region.
DECLARE LONG CreateRectRgn IN gdi32.dll ;
INTEGER ul_x, INTEGER ul_y, INTEGER br_x, INTEGER br_y
hrgn = CreateRectRgn(loRec.fld('left'),loRec.fld('top'),loRec.fld('right'),loRec.fld('bottom'))
DECLARE LONG SelectClipRgn IN gdi32.dll ;
LONG HDC_hdc, LONG HRGN_hrgn
SelectClipRgn(hdc, hrgn)
DECLARE INTEGER GradientFill IN msImg32.dll ;
LONG HDC_hdc, ;
STRING @ PTRIVERTEX_pVertex, ;
LONG ULONG_dwNumVertex, ;
STRING @ PVOID_pMesh, ;
LONG ULONG_dwNumMesh, ;
LONG ULONG_dwMode
#define GRADIENT_FILL_RECT_H 0x00000000
#define GRADIENT_FILL_RECT_V 0x00000001
#define GRADIENT_FILL_TRIANGLE 0x00000002
LOCAL lcVert, lcMesh
loStr = CREATE('Struct_TRIVERTEX')
loStr.Fld('x') = 3
loStr.Fld('y') = 10
loStr.Fld('red') = BITLSHIFT(255,8)
loStr.Fld('blue') = BITLSHIFT(127,8)
loStr.Fld('green') = BITLSHIFT(200,8)
lcVert = loStr.Structure
loStr.Fld('x') = 50
loStr.Fld('y') = 300
loStr.Fld('red') = BITLSHIFT(128,8)
loStr.Fld('blue') = BITLSHIFT(255,8)
loStr.Fld('green') = 0
lcVert = lcVert+loStr.Structure
loStr.Fld('x') = 200
loStr.Fld('y') = 20
loStr.Fld('red') = 0
loStr.Fld('blue') = BITLSHIFT(255,8)
loStr.Fld('green') = 0
lcVert = lcVert+loStr.Structure
loStr = CREATE('struct_GRADIENT_TRIANGLE')
loStr.Fld('Vertex1')=0
loStr.Fld('Vertex2')=1
loStr.Fld('Vertex3')=2
lcMesh = loStr.Structure
DECLARE LONG SetPixel IN GDI32.dll ;
INTEGER HDC_hdc, INTEGER int_X, INTEGER int_Y, LONG COLORREF_crColor
SetPixel( hDC, 5,5,12345 )
GradientFill( hDC, @lcVert, 3, @lcMesh, 1, GRADIENT_FILL_TRIANGLE )
DEBUG
SUSP
=ReleaseDC( WHND, hDC )
_SCREEN.LockScreen = .F.
DEFINE CLASS struct_TRIVERTEX AS Struct
PROCEDURE Init
THIS.AddField('x', 'LONG', 0)
THIS.AddField('y', 'LONG', 0)
THIS.AddField('Red', 'WORD', BITLSHIFT(128,8))
THIS.AddField('Green', 'WORD', BITLSHIFT(128,8))
THIS.AddField('Blue', 'WORD', BITLSHIFT(128,8))
THIS.AddField('Alpha', 'WORD', BITLSHIFT(255,8))
ENDPROC
ENDDEFINE
DEFINE CLASS struct_GRADIENT_TRIANGLE AS Struct
PROCEDURE Init
THIS.AddField('Vertex1', 'LONG', 0)
THIS.AddField('Vertex2', 'LONG', 0)
THIS.AddField('Vertex3', 'LONG', 0)
ENDPROC
ENDDEFINE
DEFINE CLASS struct_GRADIENT_RECT AS Struct
PROCEDURE Init
THIS.AddField('UpperLeft', 'LONG', 0)
THIS.AddField('LowerRight', 'LONG', 0)
ENDPROC
ENDDEFINE
DEFINE CLASS struct_RECT AS Struct
PROCEDURE Init
THIS.AddField('left', 'LONG', 0)
THIS.AddField('top', 'LONG', 0)
THIS.AddField('right', 'LONG', 0)
THIS.AddField('bottom', 'LONG', 0)
ENDPROC
ENDDEFINE