GDI Redraw

  • Hallo

    Ich habe heute mal wieder kleines GDI problem bzw ein Problem mit dem ReDraw.

    Er zeichnet das fenster nicht neu wenn ich es dem Anzeigebereich schiebe oder ein anderes Fenster überlapt.

    Spoiler anzeigen
    [autoit]


    ;[includes]
    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    ; Script Start
    Global $hGUI
    _Preview()
    Func _Preview()
    Local $sFaktor = 4 ,$Papierwidth = 2100,$Papierheight = 2950
    Local $BlattX = 10, $BlattY = 10
    Local $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout
    $hGUI = GUICreate("Vorschau", 600, 800, -1, -1)
    GUIRegisterMsg($WM_PAINT, "WM_PAINT")
    GUISetState()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    $hBrushweis = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $hBrushschwarz = _GDIPlus_BrushCreateSolid(0xFF000000)
    _GDIPlus_GraphicsFillRect($hGraphic, $BlattX -1, $BlattY -1, $Papierwidth / $sFaktor +5, $Papierheight/ $sFaktor +5,$hBrushschwarz) ; Rahmen für Blatt Papier

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

    _GDIPlus_GraphicsFillRect($hGraphic, $BlattX, $BlattY, $Papierwidth / $sFaktor, $Papierheight/ $sFaktor,$hBrushweis) ; Blatt Papier
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    $hFont = _GDIPlus_FontCreate($hFamily, 12, 2)
    $tLayout = _GDIPlus_RectFCreate(140, 110, 100, 20)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, "Hallo Welt", $hFont, $tLayout, $hFormat, $hBrushschwarz)
    Do
    Sleep(30)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Ressourcen freigeben
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrushschwarz)
    _GDIPlus_BrushDispose($hBrushweis)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    EndFunc

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

    Func WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI)
    EndFunc ;==>WM_PAINT

    [/autoit]

    Ist meine denkweise schon wieder falsch? oder sehe ich den Wald vor lauter Bäumen nicht.

    Vielen dank im vorraus

    Gummibaer

  • Also dann doch lieber den umweg über ein bild ..
    will den großen prozess (nicht im script angezeigt)
    nicht laufend neu zeichnen lassen

    oder gibt es noch eine andere möglichkeit ?

    Ich will die anzeige nur einmal zeichnen lassen danach soll er aus einen grafikobjekt neu zeichnen.