GUICtrlCreatePic - PNG-Dateien [Größe|SetPos]

  • Hi Community,

    ich bräuchte für ein Spiel unbedingt Png-Dateien im GUI. Nun habe ich Hilfe nach "PNG" durchsucht und bin auf das gewöhnliche "Funktion GUICtrlCreatePic" gestoßen.
    Dort steht "PNG kann mit GDI+ verwendet werden. Siehe Beispiel 3."

    Beispiel 3:

    Spoiler anzeigen
    [autoit]

    ;----- Beispiel 3 wie das ganze auf mit PNg funktioniert (von Zedna)
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    ; GUI erstellen
    $hGUI = GUICreate("Show PNG", 350, 301)

    [/autoit] [autoit][/autoit] [autoit]

    ; PNG Bild laden
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile("MAIN.png")
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    ; Führe die GUI aus bis sie geschlossen wird
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    ; Ressourcen aufräumen
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    ; PNG Bild zeichnen
    Func MY_WM_PAINT($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 ;==>MY_WM_PAINT

    [/autoit]

    1. Nun hatte ich das Ganze mal mit diesem Beispiel gemacht und siehe da es geht, ABER die Png-Datei ist immer viel zu groß, egal welche Größe man einstellt sie ist immer um mindestens 30 Pixel zu groß (an meinem Script liegt es nicht, schon mehrmals alles geändert). Muss man dort irgendwas auf eine fixe Größe setzen?

    2. Wie handhabe ich so eine Png-Datei? Kann ich diese auch irgendwie mit "GUICtrlSetPos" an bestimmte Positionen setzen?

    Lg Jautois

  • Hmm das wäre dann zu Frage 2: Aber es würde nur "... ein Bild an einer festgelegten Stelle" zeichnen. Ich will es aber verschieben.

  • Also kann man in Autoit keine Png-Dateien verschieben, wenn ich das richtig sehe ... äußerst dumm :S

  • Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $hWnd = GUICreate("PNG mit GDI+", 10, 10,Default,Default,0x80000000)
    GUISetBkColor (0x000000)
    GUISetState(@SW_SHOW)
    GUISetState(@SW_MAXIMIZE)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet ("{esc}","ende")
    $Old = MouseGetPos()
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\1.png")
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $Old[0]-50, $Old[1]-50, 100, 100 )
    While 1
    $Pos = MouseGetPos()
    If $Pos[0] <> $Old[0] Or $Pos[1] <> $Old[1] Then
    _GDIPlus_GraphicsFillRect($hGraphics, $Old[0]-50, $Old[1]-50, 100, 100)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $Pos[0]-50, $Pos[1]-50, 100, 100 )
    $Old = MouseGetPos()
    EndIf
    WEnd
    Func ende()
    Exit
    EndFunc

    [/autoit]

    mfg. Jam00