GDI+ verschwindet wenn Fenster gewechstelt wird

  • Hallo,

    ich habe ein Problem. Ich benutze die gdiplus funktionen, das funktioniert eigentlich ganz gut, aber wenn ich ein Fenster mit grafik erzeugt habe und dieses durch ein anderes Fenster verdeckt wurde, ist die erzeugte Grafik weg? Jetzt wollte ich wissen, ob das evtl. auch ein graka Problem von mir ist oder ob ich etwas falsch mache. Bei mir passiert das sogar bei den Beispiel Daten aus dem Help:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()
    Local $hGUI, $hWnd, $hGraphic, $hPen

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

    ; Create GUI
    $hGUI = GUICreate("GDI+", 400, 300)
    $hWnd = WinGetHandle("GDI+")
    GUISetState()

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

    ; Draw line
    _GDIPlus_Startup ()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hPen = _GDIPlus_PenCreate ()
    _GDIPlus_GraphicsDrawLine ($hGraphic, 10, 150, 390, 150, $hPen)

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Clean up resources
    _GDIPlus_PenDispose ($hPen)
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_ShutDown ()

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

    EndFunc ;==>_Main

    [/autoit]

    Also erst ist die linie da, dann ein anderes Fenster drüber legen und die Linie ist einfach weg und das Fenster ist leer.

    Ist das normal ?

    vielen Dank

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • ok das ist ne Lösung, Allerings beschleunigt das nicht gerade die Anwendung.. Gerade, wenn man etwas Aufwendigeres darstellt.

    Vielen Dank! zumindest beruhigend, dass es nicht an meinen Graka Treiber oder ähnliches liegt.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Das ist ganz normal ;) Du solltest WM_PAINT registrieren und dann jedes Mal neuzeichnen ;)

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>

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

    Opt('MustDeclareVars', 1)

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

    Global $hGUI, $hGraphic, $hPen
    ; Draw line
    _GDIPlus_Startup ()
    $hPen = _GDIPlus_PenCreate ()

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

    _Main()

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

    Func _Main()
    Local $hWnd

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

    ; Create GUI
    $hGUI = GUICreate("GDI+", 400, 300)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)

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

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    EndFunc ;==>_Main

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

    Func OnAutoItExit()
    ; Clean up resources
    _GDIPlus_PenDispose ($hPen)
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_ShutDown ()
    EndFunc

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

    Func _MY_WM_PAINT($hWnd, $uMsg, $wParam, $lParam)
    If $hWnd = $hGUI Then _GDIPlus_GraphicsDrawLine ($hGraphic, 10, 150, 390, 150, $hPen)
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]