Funktionreferenz


_WinAPI_RedrawWindow

Beschreibung anzeigen in

Aktualisiert das angegebene Rechteck oder Region im Anwendungsbereich eines Fensters

#include <WinAPIGdi.au3>
_WinAPI_RedrawWindow ( $hWnd [, $tRECT = 0 [, $hRegion = 0 [, $iFlags = 5]]] )

Parameter

$hWnd Handle zu einem Fenster
$tRECT [optional] $tagRECT Struktur welche die Koordinaten des zu aktualisierenden Rechtecks enthält. Dieser Parameter wird
ignoriert, wenn der $hRegion Parameter eine Region identifiziert.
$hRegion [optional] Identifiziert die zu aktualisierende Region. Wenn die $hRegion und $tRECT Parameter 0 sind, wird der gesamte
Anwendungsbereich des Fensters aktualisiert.
$iFlags [optional] Legt die Flags fürs Neuzeichnen fest. Dieser Parameter kann eine Kombination von Flags sein welche den Fensterinhalt für gültig oder ungültig erklären, das Neuzeichnen regeln und welche Fenster davon betroffen sind:
Die folgenden Flags werden zum Annullieren des Fensters verwendet.
    $RDW_ERASE - Bewirkt, dass das Fenster eine $WM_ERASEBKGND-Nachricht empfängt, wenn das Fenster neu gezeichnet wird. Das Flag $RDW_INVALIDATE muss ebenfalls angegeben werden. Andernfalls hat $RDW_ERASE keine Auswirkungen.
    $RDW_FRAME - Bewirkt, dass ein Teil des Nicht-Client-Bereichs des Fensters, der den Aktualisierungsbereich schneidet, eine $WM_NCPAINT-Nachricht empfängt. Das Flag $RDW_INVALIDATE muss ebenfalls angegeben werden. Andernfalls hat $RDW_FRAME keine Auswirkungen. Die $WM_NCPAINT-Nachricht wird normalerweise nicht während der Ausführung von _WinAPI_RedrawWindow() gesendet, es sei denn, $RDW_UPDATENOW oder $RDW_ERASENOW ist angegeben.
    $RDW_INTERNALPAINT - Bewirkt, dass eine $WM_PAINT-Nachricht an das Fenster gesendet wird, unabhängig davon, ob ein Teil des Fensters ungültig ist.
    $RDW_INVALIDATE - Ungültig für DllStructGetData($tRECT oder $hRegion, "") (nur eines darf nicht NULL sein). Wenn beide NULL sind, wird das gesamte Fenster ungültig gemacht.
Die folgenden Flags werden verwendet, um das Fenster zu überprüfen.
    $RDW_NOERASE - Unterdrückt alle ausstehenden $WM_ERASEBKGND-Nachrichten.
    $RDW_NOFRAME - Unterdrückt alle ausstehenden $WM_NCPAINT-Nachrichten. Dieses Flag muss mit $RDW_VALIDATE verwendet werden und wird normalerweise mit $RDW_NOCHILDREN verwendet. $RDW_NOFRAME sollte mit Vorsicht verwendet werden, da dies dazu führen kann, dass Teile eines Fensters falsch gezeichnet werden.
    $RDW_NOINTERNALPAINT - Unterdrückt alle anstehenden internen WM_PAINT-Nachrichten. Dieses Flag wirkt sich nicht auf WM_PAINT-Nachrichten aus, die aus einem Nicht-NULL-Aktualisierungsbereich stammen.
    $RDW_VALIDATE - Überprüft $tRECT oder $hRegion (nur eines darf nicht NULL sein). Wenn beide NULL sind, wird das gesamte Fenster überprüft. Dieses Flag wirkt sich nicht auf interne $WM_PAINT-Nachrichten aus.
Die folgenden Flags steuern, wann ein Neuzeichnen erfolgt. _WinAPI_RedrawWindow() aktualisiert nur dann, wenn eines dieser Flags angegeben wird.
    $RDW_ERASENOW - Bewirkt, dass die betroffenen Fenster (wie durch die Flags $RDW_ALLCHILDREN und $RDW_NOCHILDREN angegeben) gegebenenfalls $WM_NCPAINT- und $WM_ERASEBKGND-Nachrichten erhalten, bevor die Funktion zurückkehrt. $WM_PAINT-Nachrichten werden zur normalen Zeit empfangen.
    $RDW_UPDATENOW - Bewirkt, dass die betroffenen Fenster (wie durch die Flags $RDW_ALLCHILDREN und $RDW_NOCHILDREN angegeben) gegebenenfalls $WM_NCPAINT-, $WM_ERASEBKGND- und $WM_PAINT-Nachrichten erhalten, bevor die Funktion zurückkehrt.
Standardmäßig hängen die von _WinAPI_RedrawWindow() betroffenen Fenster davon ab, ob das angegebene Fenster den $WS_CLIPCHILDREN-Stil hat.
Untergeordnete Fenster, die nicht im $WS_CLIPCHILDREN-Stil sind, sind davon nicht betroffen.
Nicht-$WS_CLIPCHILDREN Fenster werden rekursiv validiert oder für ungültig erklärt, bis ein $WS_CLIPCHILDREN-Fenster gefunden wird.
Die folgenden Flags steuern, welche Fenster von der _WinAPI_RedrawWindow()-Funktion betroffen sind.
    $RDW_ALLCHILDREN - Schließt gegebenenfalls untergeordnete Fenster in das Neuzeichnen ein.
    $RDW_NOCHILDREN - Schließt gegebenenfalls untergeordnete Fenster vom Neuzeichnen aus.

Rückgabewert

Erfolg: True
Fehler: False

Bemerkungen

Wenn _WinAPI_RedrawWindow() benutzt wird, um Teile des Desktop-Fensters für ungültig zu erklären, erhält dieses keine $WM_PAINT Nachricht.
Um den Desktop neuzuzeichnen benutzt eine Anwendung das $RDW_ERASE Flag, um eine $WM_ERASEBKGND Nachricht zu erzeugen, welche dann ein neuzeichnen des Desktop-Fensters nach sich zieht.

Oben genannte Konstanten benötigen #include <WindowsConstants.au3>

Verwandte Funktionen

$tagRECT

Siehe auch

Suche nach RedrawWindow in der MSDN Bibliothek.

Beispiel

#include <WinAPIGdi.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIHObj.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>

If Not @Compiled Then Exit MsgBox($MB_ICONWARNING, "_WinAPI_CreatePen Beispielskript", _
        "Wenn das Skript von SciTE aus ausgeführt wird, funktioniert es nicht richtig, weil SciTE den Bildschirm aktualisiert. Daher wird das Kreuz nicht vollständig gezeichnet und verschwindet in einem Sekundenbruchteil!" & _
        @CRLF & @CRLF & "Bitte das Skript kompilieren und die Exe ausführen.")

ShowCross(@DesktopWidth / 2, @DesktopHeight / 2, 20, 2, 0xFF, 3000)

Func ShowCross($iStart_x, $iStart_y, $iLength, $iWidth, $iColor, $iTime)
    Local $hDC, $hPen, $o_Orig

    $hDC = _WinAPI_GetWindowDC(0) ; Gerätekontext (DC) des gesamten Bildschirms (Desktop)
    $hPen = _WinAPI_CreatePen($PS_SOLID, $iWidth, $iColor)
    $o_Orig = _WinAPI_SelectObject($hDC, $hPen)

    _WinAPI_DrawLine($hDC, $iStart_x - $iLength, $iStart_y, $iStart_x - 5, $iStart_y) ; Horizontal links
    _WinAPI_DrawLine($hDC, $iStart_x + $iLength, $iStart_y, $iStart_x + 5, $iStart_y) ; Horizontal rechts
    _WinAPI_DrawLine($hDC, $iStart_x, $iStart_y - $iLength, $iStart_x, $iStart_y - 5) ; Vertikal oben
    ; _WinAPI_DrawLine($hDC, $iStart_x, $iStart_y + $iLength, $iStart_x, $iStart_y + 5) ;  Vertikal unten
    _WinAPI_MoveTo($hDC, $iStart_x, $iStart_y + $iLength)
    _WinAPI_LineTo($hDC, $iStart_x, $iStart_y + 5)

    Sleep($iTime) ; Zeigt das Kreuz für die im Funktionsaufruf angegebene Zeit (in ms)

    ; Desktop neu zeichnen (lösche das Kreuz)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)

    ; Ressourcen freigeben
    _WinAPI_SelectObject($hDC, $o_Orig)
    _WinAPI_DeleteObject($hPen)
    _WinAPI_ReleaseDC(0, $hDC)
EndFunc   ;==>ShowCross