Problem mit GUICtrlSetGraphic

  • Hi,
    hab mal ein wenig mit GUICtrlSetGraphic herumgespielt jedoch hab ich ein Problem.

    Hier erstmal der Code:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $SurfaceGUI = GUICreate("SurfaceGUI", 400, 400)
    $Surface = GUICtrlCreateGraphic(0,0, 400, 400)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetGraphic($surface, $GUI_GR_MOVE, 100, 100)
    GUICtrlSetGraphic($surface, $GUI_GR_LINE, 100, 200)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Sleep(2000)

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

    _test()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _test()
    $test = GUICtrlSetGraphic($surface, $GUI_GR_LINE, 100, 300)
    EndFunc

    [/autoit]

    Die ersten GUICtrlSetGraphic werden ja noch ausgeführt, aber warum wird GUICtrlSetGraphic in der Func nicht ausgeführt?
    Irgendwie steh ich grad auf dem schlauch :S

    Hoffe jemand findet des Rätsels Lösung^^

    MfG

    Bladerunner ;)

    Einmal editiert, zuletzt von Bladerunner85 (21. Mai 2010 um 21:34)

  • Schon gefunden ... ;)

    Spoiler anzeigen
    [autoit]

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

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

    Global $SurfaceGUI = GUICreate("SurfaceGUI", 400, 400)
    Global $Surface = GUICtrlCreateGraphic(0,0, 400, 400)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetGraphic($surface, $GUI_GR_MOVE, 100, 100)
    GUICtrlSetGraphic($surface, $GUI_GR_LINE, 100, 200)
    GUISetState(@SW_SHOW)

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

    Sleep(2000)

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

    _test()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _test()
    $test = GUICtrlSetGraphic($surface, $GUI_GR_LINE, 200, 200)
    ; Erklärt den gesamten Anwendungsbereich für ungültig und veranlasst ein Neuzeichnen des selbigen.
    InvalidateRect ($SurfaceGUI, 0, TRUE)
    EndFunc

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

    Func InvalidateRect ($hWnd, $lpRect, $bErase)

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

    Local $aRes = DllCall ("user32.dll", 'int', 'InvalidateRect', _
    'hwnd', $hWnd, _ ; handle to window
    'ptr', $lpRect, _ ; rectangle coordinates
    'int', $bErase) ; erase state
    Return $aRes[0]

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

    EndFunc

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


    ... und so kann man die Zeichenaktion optimieren ...

    Spoiler anzeigen
    [autoit]

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

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

    Global Const $_RECT = _
    "long left;"& _
    "long top;"& _
    "long right;"& _
    "long bottom;"

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

    Global $SurfaceGUI = GUICreate("SurfaceGUI", 400, 400)
    Global $Surface = GUICtrlCreateGraphic(0,0, 400, 400)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetGraphic($surface, $GUI_GR_MOVE, 100, 100)
    GUICtrlSetGraphic($surface, $GUI_GR_LINE, 100, 200)
    GUISetState(@SW_SHOW)

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

    Sleep(2000)

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

    DrawLine (100, 200, 200, 200)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    ; x, y = Startpunkt; cx, cy = Endpunkt
    Func DrawLine ($x, $y, $cx, $cy)

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

    Local $rc

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

    $rc = DllStructCreate ($_RECT)
    DllStructSetData ($rc, "left", $x)
    DllStructSetData ($rc, "top", $y)
    DllStructSetData ($rc, "right", $cx + 1)
    DllStructSetData ($rc, "bottom", $cy + 1)

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

    $test = GUICtrlSetGraphic($surface, $GUI_GR_LINE, $cx, $cy)

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

    ; In diesem Falle wird nur das angegebene Rechteck für ungültig erklärt und neu gezeichnet.
    InvalidateRect ($SurfaceGUI, DllStructGetPtr ($rc), TRUE)
    EndFunc

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

    Func InvalidateRect ($hWnd, $lpRect, $bErase)

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

    Local $aRes = DllCall ("user32.dll", 'int', 'InvalidateRect', _
    'hwnd', $hWnd, _ ; handle to window
    'ptr', $lpRect, _ ; rectangle coordinates
    'int', $bErase) ; erase state
    Return $aRes[0]

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

    EndFunc

    [/autoit]


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (21. Mai 2010 um 18:25)