Funktionreferenz


_WinAPI_CreatePen

Beschreibung anzeigen in

Erstellt einen logischen Stift, der den angegebenen Stil, Breite und Farbe hat

#include <WinAPIGdi.au3>
_WinAPI_CreatePen ( $iPenStyle, $iWidth, $iColor )

Parameter

$iPenStyle Gibt den Stifttyp an. Es kann einer der folgenden Werte verwendet werden.
PS_SOLID - Der Stift ist ununterbrochen.
PS_DASH - Der Stift ist gestrichelt. Dieser Stil ist nur gültig, wenn die Stiftbreite eine Geräteeinheit oder weniger beträgt.
PS_DOT - Der Stift ist gepunktet. Dieser Stil ist nur gültig, wenn die Stiftbreite eine Geräteeinheit oder weniger beträgt.
PS_DASHDOT - Der Stift ist abwechselnd gepunktet und gestrichelt. Dieser Stil ist nur gültig, wenn die Stiftbreite eine Geräteeinheit oder weniger beträgt.
PS_DASHDOTDOT - Der Stift wechselt zwischen einem Strich und zwei Punkten. Dieser Stil ist nur gültig, wenn die Stiftbreite eine Geräteeinheit oder weniger beträgt.
PS_NULL - Der Stift ist unsichtbar.
PS_INSIDEFRAME - Der Stift ist ununterbrochen. Wenn der Stift in irgend einer GDI-Zeichenfunktion verwendet wird, die ein Begrenzungsrechteck annimmt, werden die Ausmaße der Figur geschrumpft, so dass sie vollständig in das Begrenzungsrechteck passt, wobei die Breite des Zeichenstifts beachtet wird. Das gilt nur für geometrische Stifte.
$iWidth Gibt die Breite des Stifts in logischen Einheiten an.
$iColor Gibt die Farbe des Stifts an (BGR, umgekehrt zum "normalen" RGB)

Rückgabewert

Erfolg: HPEN-Wert, der einen logischen Stift identifiziert
Fehler: 0

Bemerkungen

Der Stift kann anschließend in einem Gerätekontext gewählt und dazu benutzt werden, Linien und Kurven zu zeichnen.
Nachdem eine Anwendung einen logischen Stift erstellt hat, kann sie ihn durch Aufrufen von _WinAPI_SelectObject() in einen Gerätekontext einbinden. Nachdem ein Stift in einen Gerätekontext eingebunden ist, kann er zum Zeichnen von Linien und Kurven verwendet werden.
Falls der Wert für nWidth 0 (null) ist, wird eine Linie, die damit gezeichnet wird, immer einen Pixel breit (ungeachtet der aktuellen Transformation).
Falls der Wert für nWidth größer als 1 ist, muss der $iPenStyle-Parameter PS_NULL, PS_SOLID oder PS_INSIDEFRAME sein.
Wenn der Stift nicht länger benötigt wird, muss dieser mit der Funktion DeleteObject gelöscht werden.

Verwandte Funktionen

_WinAPI_DeleteObject, _WinAPI_DrawLine, _WinAPI_GetBkMode, _WinAPI_LineTo, _WinAPI_MoveTo, _WinAPI_SelectObject, _WinAPI_SetBkMode

Siehe auch

Suche nach CreatePen 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