#INCLUDE "windows.bi"
#INCLUDE "win/gdiplus.bi"
Using GDIPLUS
Dim wc As WNDCLASSEX
Dim  msg As MSG
Dim ULONG_PTR_01 As ULONG_PTR
Dim GDIPLUSSTARTUPINPUT_01 As GDIPLUSSTARTUPINPUT
GDIPLUSSTARTUPINPUT_01.GdiplusVersion = 1
If (GDIPLUSSTARTUP(@ULONG_PTR_01, @GDIPLUSSTARTUPINPUT_01, NULL) <> 0) Then
	Print "FAIL"
EndIf
Sub OnPaint(compHdc As HDC)
 Dim As PVOID GpGraphics,linGrBrush,pen
 Dim As GpPointF p1,p2
 Dim As Single relativeIntensities(2)={0.0, 0.5, 1.0}
 Dim As Single relativePositions(2)={0.0, 0.2, 1.0}
 p1.x=0:p1.y=10
 p2.x=200:p2.y=100
 GdipCreateFromHDC(compHdc,@GpGraphics)
 GdipGraphicsClear(GpGraphics,&hffffffff)
 GdipCreateLineBrush(@p1,@p2,&hff0000FF,&hff00ff00,WrapModeTile,@linGrBrush)
 GdipCreatePen2(linGrBrush,10,Unitpixel,@pen)
 GdipDrawLine(GpGraphics,pen ,0, 0, 600, 300)
 GdipFillEllipse(GpGraphics,linGrBrush,10, 100, 200, 100)
 GdipDeleteBrush(linGrBrush)
 GdipDeletePen(pen)
 GdipDeleteGraphics(GpGraphics)
End Sub
Function WndProc(hWnd As HWND,uMsg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer
	Dim ps As PAINTSTRUCT
	Static As HDC compHdc,hdc
	Select Case uMsg
		Case WM_CLOSE
			DeleteDC(compHdc)
			PostQuitMessage(0)
		Case WM_CREATE		
			hdc=GetDC(GetDesktopWindow)
			compHdc=CreateCompatibleDC(hdc)
			Var bitmap = CreateCompatibleBitmap(hdc,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN))
			SelectObject(compHdc,bitmap)
			DeleteObject(bitmap)
			ReleaseDC(GetDesktopWindow,hdc)
			OnPaint(compHdc)
			InvalidateRect(hwnd,0,0)
		Case WM_PAINT
			BeginPaint(hWnd,@ps)
			BitBlt(ps.hdc,ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right-ps.rcPaint.left,ps.rcPaint.bottom-ps.rcPaint.top,compHdc,ps.rcPaint.left,ps.rcPaint.top,SRCCOPY)
			EndPaint(hWnd,@ps)
			Return 0
		Case Else
			Return DefWindowProc(hWnd,uMsg,wParam,lParam)
	End Select
End Function

With wc
	.hInstance=GetModuleHandle(0)
	.cbSize=SizeOf(WNDCLASSEX)
	.style=CS_HREDRAW Or CS_VREDRAW
	.lpfnWndProc=@WndProc
	.lpszClassName=StrPtr("class")
	.hCursor=LoadCursor(NULL,IDC_ARROW)
End With
RegisterClassEx(@wc)
CreateWindowEx(0,wc.lpszClassName,"DrawGDI+",WS_OVERLAPPEDWINDOW Or WS_VISIBLE,200,200,620,345,0,0,wc.hInstance,0)

While GetMessage(@msg,0,0,0)
	TranslateMessage(@msg)
	DispatchMessage(@msg)
Wend