Holt einen Gerätekontext (DC) für das gesamte Fenster
#include <WinAPIGdiDC.au3>
_WinAPI_GetWindowDC ( $hWnd )
$hWnd | Handle des Fensters |
Erfolg: | Handle zu einem Gerätekontext für das gesamte Fenster |
Fehler: | 0 |
GetWindowDC ist für Zeichenoperationen im Non-Client-Bereich gedacht, also außerhalb des Anwendungsbereichs. Zeichenoperationen
im Non-Client-Bereich eines Fensters sind normalerweise nicht empfohlen. Die Funktion GetSystemMetrics kann benutzt werden, um
die Dimensionen der unterschiedlichen Bereiche im Non-Client-Bereich zu erhalten, wie die Titelleiste, Menü und Scrollbars.
Nach Zeichenoperationen in einem Gerätekontext, muss _WinAPI_ReleaseDC() aufgerufen werden um den Gerätekontext wieder freizugeben.
Den Gerätekontext nicht wieder freizugeben hat ernste Folgen für Zeichenoperationen anderer Applikationen.
Suche nach GetWindowDC in der MSDN Bibliothek.
#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