#include-once
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsex.au3>


Global $Var__tSize,$Var__tBlend,$Var__tSource

;~ $gui=_CreateGUIT("Test",100,100,$WS_SYSMENU,0)
;~ GUISetState()
;~ _GDIPlus_GraphicsFillEllipse($gui[5],0,0,100,100)
;~ _DrawonGUIT($gui)
;~ while GUIGetMsg()<>-3
;~ 	Sleep(10)
;~ WEnd
;~ _DeleteGUIT($gui)
;~ _GDIPlus_Shutdown()




Func _CreateGUIT($Var__title="",$Var__width=400,$Var__height=400,$Var__style=0,$Var__exstyle=0,$Var__parent=0)
	Local $Var__gui[9];GUI,ScreenDC,DC,Graphics,Buffer,Backbuffer,Size,Point,Blend
	_GDIPlus_Startup()
	$Var__gui[0]=GUICreate($Var__title,$Var__width,$Var__height,-1,-1,BitOR($WS_POPUP,$Var__style),BitOR($WS_EX_LAYERED,$Var__exstyle),$Var__parent)
	$Var__gui[1]=_WinAPI_GetDC($Var__gui[0])
	$Var__gui[2]=_WinAPI_CreateCompatibleDC($Var__gui[1])
	$Var__gui[3]=_GDIPlus_GraphicsCreateFromHWND($Var__gui[0])
	$Var__gui[4]=_GDIPlus_BitmapCreateFromGraphics($Var__width,$Var__height,$Var__gui[3])
	$Var__gui[5]=_GDIPlus_ImageGetGraphicsContext($Var__gui[4])
	_GDIPlus_GraphicsSetSmoothingMode($Var__gui[5],4) ;bringt das etwas?
	$Var__tSize = DllStructCreate($tagSIZE)
    $Var__gui[6] = DllStructGetPtr($Var__tSize)
    DllStructSetData($Var__tSize, "X", $Var__width)
    DllStructSetData($Var__tSize, "Y", $Var__height)
    $Var__tSource = DllStructCreate($tagPOINT)
    $Var__gui[7] = DllStructGetPtr($Var__tSource)
    $Var__tBlend = DllStructCreate($tagBLENDFUNCTION)
    $Var__gui[8] = DllStructGetPtr($Var__tBlend)
    DllStructSetData($Var__tBlend, "Alpha", 255)
    DllStructSetData($Var__tBlend, "Format", 1)
	;GUISetState(@SW_SHOW,$Var__gui[0])
	Return $Var__gui
EndFunc

Func _DrawonGUIT($Var__theguiarray);GUI-0,ScreenDC-1,DC-2,Graphics-3,Buffer-4,Backbuffer-5,Size-6,Point-7,Blend-8
	if not isarray($Var__theguiarray) then return seterror(1,0,0)
	Local $Var__hbmp=_GDIPlus_BitmapCreateHBITMAPFromBitmap($Var__theguiarray[4])
    _WinAPI_SelectObject($Var__theguiarray[2], $Var__hbmp)
    _WinAPI_UpdateLayeredWindow($Var__theguiarray[0], $Var__theguiarray[1], 0, $Var__theguiarray[6], $Var__theguiarray[2], $Var__theguiarray[7], 0, $Var__theguiarray[8], 2)
	_WinAPI_DeleteObject($Var__hbmp)
	Return SetError(0,0,1)
EndFunc

Func _DeleteGUIT(ByRef $Var__theguiarray)
	if not isarray($Var__theguiarray) then return seterror(1,0,0)
	$Var__theguiarray[8]=0
	$Var__theguiarray[7]=0
	$Var__theguiarray[6]=0
	_GDIPlus_GraphicsDispose($Var__theguiarray[5])
	_GDIPlus_BitmapDispose($Var__theguiarray[4])
	_GDIPlus_GraphicsDispose($Var__theguiarray[3])
	_WinAPI_DeleteDC($Var__theguiarray[2])
	_WinAPI_ReleaseDC($Var__theguiarray[0],$Var__theguiarray[1])
	GUIDelete($Var__theguiarray[0])
	ReDim $Var__theguiarray[1]
	;_GDIPlus_Shutdown()
	Return SetError(0,0,1)
EndFunc

