#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

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
			Dim As PVOID redBrush, greenBrush, brush , GpGraphics , bitmapGraphics , GDIbitmap
			Dim As Integer w,h
			hdc=GetDC(GetDesktopWindow)
			compHdc=CreateCompatibleDC(hdc)
			Var bitmap = CreateCompatibleBitmap(hdc,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN))
			SelectObject(compHdc,bitmap)
			DeleteObject(bitmap)
			ReleaseDC(GetDesktopWindow,hdc)
			GdipCreateBitmapFromScan0(180,100,NULL,PixelFormat32bppARGB,NULL,@GDIbitmap)
			GdipGetImageGraphicsContext(GDIbitmap,@bitmapGraphics)
			GdipCreateSolidFill(RGBA(255,0,0,210),@redBrush)
			GdipCreateSolidFill(RGBA(0,255,0,210),@greenBrush)
			GdipSetCompositingMode(bitmapGraphics,CompositingModeSourceCopy)
			GdipFillEllipse(bitmapGraphics,redBrush,0,0,150,70)
			GdipFillEllipse(bitmapGraphics,greenBrush,30,30,150,70)
			GdipCreateFromHDC(compHdc,@GpGraphics)
			GdipSetCompositingQuality(GpGraphics,CompositingQualityGammaCorrected)
			GdipCreateSolidFill(&hFF00FFFF,@brush)
			GdipFillRectangle(GpGraphics,brush,200,0,60,100)
			GdipSetSolidFillColor(brush,&hFFFFFF00)
			GdipFillRectangle(GpGraphics,brush,260,0,60,100)
			GdipSetSolidFillColor(brush,&hFFFF00FF)
			GdipFillRectangle(GpGraphics,brush,320,0,60,100)
			GdipDrawImage(GpGraphics,GDIbitmap,0,0)
			GdipDrawImage(GpGraphics,GDIbitmap,200,0)
			GdipDeleteBrush(brush)
			GdipDeleteBrush(redBrush)
			GdipDeleteBrush(greenBrush)
			GdipDisposeImage(GDIbitmap)
			GdipDeleteGraphics(bitmapGraphics)
			GdipDeleteGraphics(GpGraphics)
			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,400,150,0,0,wc.hInstance,0)

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