[AutoIT] GDI+ auf dem "Bildschirm" malen

03/31/2013 12:27 Croco™#1
Hi,
ich wollte euch meine Methode zeigen wie man ganz einfach auf den Bildschirm malen kann mit GDI+. Was man dazu braucht ist eine 1x1 Pixel große .gif Datei mit der Farbe 00FF00 (Rot: 0 , Grün: 255, Blau: 0). Diese Datei benutzen wir als "Green Screen" und schneiden sie später aus unserer GUI. ([Only registered and activated users can see links. Click Here To Register...])

Nun zum Code:

1.) GUI erstellen
Es muss nur eine ganz simple GUI mit einem Bild das über die ganze Fläche der GUI geht erstellt werden. Als Flags nehmen wir $WS_POPUP,$WS_EX_TOPMOST und $WS_EX_LAYERED. Hier kommt unsere gif Datei zum Einsatz die wir als Bild benutzen.

Code:
$Form1 = GUICreate("", 10, 10, 192, 124, [COLOR="Green"]$WS_POPUP,BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST)[/COLOR])
$Pic1 = GUICtrlCreatePic("bg.gif", 0, 0, 10, 10)
GUISetState(@SW_SHOW)
2.) Includes
Für das ausschneiden der Grünen Farbe und das Benutzen der GDI+ benötigen wir folgende zwei Includes die wir an den Anfang unseres Scriptes setzen.
Code:
#include <GDIPlus.au3>
#include <WinApi.au3>
3.) Grün ausschneiden
Hierfür stellt uns die WinApi eine Funktion zur Verfügung die als ersten Parameter das Fenster Handle und als zweiten die Farbe fordert.

Code:
_WinAPI_SetLayeredWindowAttributes($Form1, 0x00FF00)
$Form1 = Unser GUI Fenster
0x00FF00 = Die Farbe der gif Datei: Grün

Code:
#include <GDIPlus.au3>
#include <WinApi.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("", 10, 10, 192, 124, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST))
$Pic1 = GUICtrlCreatePic("bg.gif", 0, 0, 10, 10)
_WinAPI_SetLayeredWindowAttributes($Form1, 0x00FF00)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
4.) Malen
Nun müssen wir nur noch malen ;)
D.h. GDI starten, Graphik initialisieren und unsere gewünschte Form malen.
Code:
_GDIPlus_Startup()
	$Handle = _GDIPlus_GraphicsCreateFromHWND($Form1)
		_GDIPlus_GraphicsDrawRect($Handle,0,0,9,9)

While 1
	Sleep(300)
WEnd

_GDIPlus_Shutdown()
In diesem Fall malen wir ein Rechteck (Rect) auf unser Fenster.
Code:
_GDIPlus_GraphicsDrawRect($Handle,0,0,9,9)
Code:
#include <GDIPlus.au3>
#include <WinApi.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("", 10, 10, 192, 124, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST))
$Pic1 = GUICtrlCreatePic("bg.gif", 0, 0, 10, 10)
_WinAPI_SetLayeredWindowAttributes($Form1, 0x00FF00)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

_GDIPlus_Startup()
	$Handle = _GDIPlus_GraphicsCreateFromHWND($Form1)
		_GDIPlus_GraphicsDrawRect($Handle,0,0,9,9)

While 1
	Sleep(300)
WEnd

_GDIPlus_Shutdown()
Opt. [5.) Form löschen (übermalen)]
Wollen wir mehrere Sachen malen würde unser Fenster schnell voll werden also löschen wir bevor wir etwas neues kreieren erstmal das alte mit
Code:
_WinAPI_RedrawWindow($Form1)
Dadurch wird unser GUI Fenster "resettet".

Ich danke Achat für sein Tutorial : [Only registered and activated users can see links. Click Here To Register...] da es mich auf die Idee gebracht hat.