#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $gui, $guiPos, $pic, $picPos

Example1()
Example2()

;----- Пример 1 ----
Func Example1()
	Local $n, $msg

	GUICreate("GUI с рисунком", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; Создаёт окно в центре экрана

	GUISetBkColor(0xE0FFFF)
	$n = GUICtrlCreatePic(@ScriptDir & "\..\GUI\mslogo.jpg", 50, 50, 200, 50)

	GUISetState()

	; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
	While 1
		$msg = GUIGetMsg()

		If $msg = $GUI_EVENT_CLOSE Then ExitLoop
	WEnd

	; Изменяет размер элемента
	$n = GUICtrlSetPos($n, 50, 50, 200, 100)
	; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
	While 1
		$msg = GUIGetMsg()

		If $msg = $GUI_EVENT_CLOSE Then ExitLoop
	WEnd

	GUIDelete()
EndFunc

;----- Пример 2
Func Example2()
	Local $msg

	$gui = GUICreate("Прозрачный", 200, 100)
	$pic = GUICreate("", 68, 71, 10, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
	GUICtrlCreatePic(@ScriptDir & "\..\GUI\merlin.gif", 0, 0, 0, 0)

	GUISetState(@SW_SHOW, $pic)
	GUISetState(@SW_SHOW, $gui)

	HotKeySet("{ESC}", "Main")
	HotKeySet("{Left}", "Left")
	HotKeySet("{Right}", "Right")
	HotKeySet("{Down}", "Down")
	HotKeySet("{Up}", "Up")
	$picPos = WinGetPos($pic)
	$guiPos = WinGetPos($gui)

	Do
		$msg = GUIGetMsg()
	Until $msg = $GUI_EVENT_CLOSE

	HotKeySet("{ESC}")
	HotKeySet("{Left}")
	HotKeySet("{Right}")
	HotKeySet("{Down}")
	HotKeySet("{Up}")
EndFunc

Func Main()
	$guiPos = WinGetPos($gui)
	WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)
EndFunc

Func Left()
	$picPos = WinGetPos($pic)
	WinMove($pic, "", $picPos[0] - 10, $picPos[1])
EndFunc

Func Right()
	$picPos = WinGetPos($pic)
	WinMove($pic, "", $picPos[0] + 10, $picPos[1])
EndFunc

Func Down()
	$picPos = WinGetPos($pic)
	WinMove($pic, "", $picPos[0], $picPos[1] + 10)
EndFunc

Func Up()
	$picPos = WinGetPos($pic)
	WinMove($pic, "", $picPos[0], $picPos[1] - 10)
EndFunc

;----- Пример 3, PNG, работа цикла от Zedna
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1

; Создаёт GUI
$hGUI = GUICreate("PNG", 250, 250)

; Загружает рисунок PNG
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\..\GUI\Torus.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
GUISetState()

; Цикл ожидающий выхода
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

; Очищает от ресурсов
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

; Рисует рисунок PNG
Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
	#forceref $hWnd, $Msg, $wParam, $lParam
	_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
	_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
	_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
	Return $GUI_RUNDEFMSG
EndFunc