Function Reference

_WinAPI_CreatePen

指定されたスタイル、幅、色の論理ペンを作成します。

#Include <WinAPI.au3>
_WinAPI_CreatePen($iPenStyle, $iWidth, $nColor)

 

パラメータ

$iPenStyle ペンのスタイルを指定します。次の値のいずれかです:
PS_SOLID - 実線のペンです。
PS_DASH - 破線のペンです。このスタイルはペン幅が1またはデバイス単位より小さい場合のみ有効です。
PS_DOT - 点線のペンです。このスタイルはペン幅が1またはデバイス単位より小さい場合のみ有効です。
PS_DASHDOT - 一点鎖線のペンです。このスタイルはペン幅が1またはデバイス単位より小さい場合のみ有効です。
PS_DASHDOTDOT - 二点鎖線のペンです。このスタイルはペン幅が1またはデバイス単位より小さい場合のみ有効です。
PS_NULL - 見えないペンです。
PS_INSIDEFRAME - 実線のペンです。境界長方形を指定するGDI描画関数でこのペンを使うとペン幅が考慮され、その長方形に完全に収まるように図形が縮小されます。ジオメトリックペンにのみ適用されます。
$iWidth ペンの幅を論理単位で指定します。
$nColor ペンの色(BGR)を指定します。

 

返し値

成功: 論理ペンを識別するためのHPEN値
失敗: 0

 

注意

ペンは後でデバイスコンテキストで選択され、線や弧の描画に使用されます。
アプリケーションで論理ペンを作成後に、SelectObject関数を呼ぶことでペンをデバイスコンテキストに選択できます。
nWidthパラメータで指定された値がゼロの場合、作成したペンで描画する線の幅は現在の変換に関係なく常に1ピクセルです。
nWidthパラメータで指定された値が1より大きい場合、fnPenStyleパラメータはPS_NULL、PS_SOLID、PS_INSIDEFRAMEのいずれかでなければなりません。
ペンが必要なくなった際は_WinAPI_DeleteObjectを呼んで削除してください。

 

関連

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

 

こちらも参照

MSDNライブラリでCreatePenを検索して下さい。

 


#include <WindowsConstants.au3>
#include <WinAPI.au3>

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

Func ShowCross($start_x, $start_y, $length, $width, $color, $time)
    Local $hDC, $hPen, $obj_orig

    $hDC = _WinAPI_GetWindowDC(0) ; 全体スクリーン(デスクトップ)のDC
    $hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color)
    $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
   
    _WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; 水平方向 左
    _WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; 水平方向 右
    _WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; 垂直方向 上
    ;   _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; 垂直方向 下
    _WinAPI_MoveTo($hDC, $start_x, $start_y + $length)
    _WinAPI_LineTo($hDC, $start_x, $start_y + 5)

    Sleep($time) ; 十字画面を指定した秒数だけ表示

    ; デスクトップをリフレッシュ(十字を消す)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)

    ; リソースを削除
    _WinAPI_SelectObject($hDC, $obj_orig)
    _WinAPI_DeleteObject($hPen)
    _WinAPI_ReleaseDC(0, $hDC)
EndFunc   ;==>ShowCross