GUI flackert beim Resizen

  • Hallo,

    wie kann ich das flackern bei meinem Beispielscript abstellen?

    Spoiler anzeigen
    [autoit]

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

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

    $Form1 = GUICreate("Form1", 150, 150, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $pic = GUICtrlCreatePic("Pic.jpg", 0, 0, 150, 150)
    GUISetState(@SW_SHOW)

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

    $p = WinGetPos($Form1)

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

    $Old1 = $p[2]
    $Old2 = $p[3]

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

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

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

    EndSwitch

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

    $p = WinGetPos($Form1)

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

    If $p[2] <> $Old1 Or $p[3] <> $Old2 Then
    GUICtrlSetPos($pic, 0, 0, $p[2], $p[3])
    GUICtrlSetImage($pic, "Pic.jpg")
    $Old1 = $p[2]
    $Old2 = $p[3]
    EndIf

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

    Sleep(10)
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Unter WindowsXP funktioniert das (Vista nicht getestet):

    [autoit]


    If Not IsDeclared('WS_EX_COMPOSITED') Then Global Const $WS_EX_COMPOSITED = 0x02000000
    $Form1 = GUICreate("Form1", 150, 150, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS), $WS_EX_COMPOSITED)

    [/autoit]

    Edit:
    Und wenn Du es so änderst, dann wird die Größe bereits beim ziehen des Fenster angepasst:

    Spoiler anzeigen
    [autoit]


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

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

    If Not IsDeclared('WS_EX_COMPOSITED') Then Global Const $WS_EX_COMPOSITED = 0x02000000
    $Form1 = GUICreate("Form1", 150, 150, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS), $WS_EX_COMPOSITED)
    $pic = GUICtrlCreatePic("Pic.jpg", 0, 0, 150, 150)
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_SIZE, 'WM_SIZE')
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
    $p = WinGetPos($Form1)
    GUICtrlSetPos($pic, 0, 0, $p[2], $p[3])
    GUICtrlSetImage($pic, "Pic.jpg")
    EndFunc

    [/autoit]