GDI+ Problem

  • Hi Leute,
    ich habe nochmal eine Frage:
    Wie kann man es verhindern, dass der große, gelbe Kreisstunnel nicht gelöscht wird, sondern der Blaue Kreis ÜBER diesem ist.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <gdiplus.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 625, 192, 124)
    $hwnd = wingethandle($Form1)
    GUISetBkColor(0x0000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hGraphic2 = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $ParticleBitmap = _GDIPlus_BitmapCreateFromGraphics(625, 625, $hgraphic)
    $ParticleBitmap2 = _GDIPlus_BitmapCreateFromGraphics(625, 625, $hgraphic2)
    $ParticleBuffer = _GDIPlus_ImageGetGraphicsContext($ParticleBitmap)
    $ParticleBuffer2 = _GDIPlus_ImageGetGraphicsContext($ParticleBitmap2)
    $Pen = _GDIPlus_PenCreate(0, 1)
    $Pen2 = _GDIPlus_PenCreate(0, 1)
    _GDIPlus_GraphicsClear($ParticleBuffer)
    _GDIPlus_GraphicsClear($ParticleBuffer2)
    $i = 0
    $plus = 10
    $l = 0
    $z = 295
    while $i < 900

    ;_GDIPlus_PenSetColor($Pen, "0xff" & Hex(255, 2) & Hex(($i)/3/10*22, 2) & Hex(0, 2))
    _GDIPlus_PenSetColor($Pen, "0xff" & Hex($i/5/10*13, 2) & Hex($i/5/10*13, 2) & Hex($i/5/10*3.5, 2))

    _GDIPlus_GraphicsDrawEllipse($particlebuffer, 625/2-$i/2, 625/2-$i/2, $i, $i, $pen)

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $ParticleBitmap, 0, 0, 625, 625)
    $i +=$plus
    sleep(1)

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

    WEnd

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


    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_BitmapDispose($ParticleBitmap)
    _GDIPlus_GraphicsDispose($ParticleBuffer)
    ;~ _GDIPlus_BrushDispose($Brush)
    _GDIPlus_Shutdown ()
    Exit

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

    EndSwitch

    $z = 295

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

    _GDIPlus_PenSetColor($Pen2, "0xff" & "00" & Hex(200, 2) & Hex(100, 2))
    ;_GDIPlus_PenSetColor($Pen, "0xff" & Hex($i/5/10*27, 2) & Hex($i/5/10*27, 2) & Hex($i/5/10*3.5, 2))

    _GDIPlus_GraphicsDrawEllipse($particlebuffer2, 625/2-$i/2, 625/2-$i/2, $i, $i, $pen2)

    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $ParticleBitmap2, 0, 0, 625, 625)
    $i +=$plus
    sleep(10)

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

    if $i < 900 then
    $i +=1
    Else
    $i = 0
    EndIf

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

    sleep(10)
    _gdiplus_graphicsclear($particlebuffer2)
    WEnd

    [/autoit]


    Danke im Vorraus!

  • Meinst du das so?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <gdiplus.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 625, 192, 124)
    $hwnd = wingethandle($Form1)
    GUISetBkColor(0x0000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    ;~ $hGraphic2 = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $ParticleBitmap = _GDIPlus_BitmapCreateFromGraphics(625, 625, $hgraphic)
    $ParticleBitmap2 = _GDIPlus_BitmapCreateFromGraphics(625, 625, $hgraphic)
    $ParticleBuffer = _GDIPlus_ImageGetGraphicsContext($ParticleBitmap)
    $ParticleBuffer2 = _GDIPlus_ImageGetGraphicsContext($ParticleBitmap2)
    $Pen = _GDIPlus_PenCreate(0, 1)
    $Pen2 = _GDIPlus_PenCreate(0, 1)
    _GDIPlus_GraphicsClear($ParticleBuffer)
    _GDIPlus_GraphicsClear($ParticleBuffer2)
    $i = 0
    $plus = 10
    $l = 0
    $z = 295
    while $i < 900

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

    ;_GDIPlus_PenSetColor($Pen, "0xff" & Hex(255, 2) & Hex(($i)/3/10*22, 2) & Hex(0, 2))
    _GDIPlus_PenSetColor($Pen, "0xff" & Hex($i/5/10*13, 2) & Hex($i/5/10*13, 2) & Hex($i/5/10*3.5, 2))

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

    _GDIPlus_GraphicsDrawEllipse($particlebuffer, 625/2-$i/2, 625/2-$i/2, $i, $i, $pen)

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

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $ParticleBitmap, 0, 0, 625, 625)
    $i +=$plus
    sleep(1)

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

    WEnd

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_BitmapDispose($ParticleBitmap)
    _GDIPlus_GraphicsDispose($ParticleBuffer)
    ;~ _GDIPlus_BrushDispose($Brush)
    _GDIPlus_Shutdown ()
    Exit

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

    EndSwitch

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

    $z = 295

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

    _GDIPlus_GraphicsDrawImageRect($particlebuffer2, $ParticleBitmap, 0, 0, 625, 625)
    _GDIPlus_PenSetColor($Pen2, "0xff" & "00" & Hex(200, 2) & Hex(100, 2))
    ;_GDIPlus_PenSetColor($Pen, "0xff" & Hex($i/5/10*27, 2) & Hex($i/5/10*27, 2) & Hex($i/5/10*3.5, 2))

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

    _GDIPlus_GraphicsDrawEllipse($particlebuffer2, 625/2-$i/2, 625/2-$i/2, $i, $i, $pen2)

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

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $ParticleBitmap2, 0, 0, 625, 625)
    $i +=$plus
    sleep(10)

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

    if $i < 900 then
    $i +=1
    Else
    $i = 0
    EndIf

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

    sleep(10)

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

    WEnd

    [/autoit]

    Tipp: Schaue dir doch mal die anderen Beispiele an, wie man GDI+ "besser" darstellen kann. Stichwörter: GUISetOnEvent(), GUIRegisterMsg($WM_PAINT, "WM_PAINT"), GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND"), etc.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯