UDF > WinAPIEx > GDI > Brush & Pen >


_WinAPI_ExtCreatePen

Crée un crayon logique, cosmétique ou géométrique, qui a le style, la largeur, et les attributs d'un pinceau donnés

#include <WinAPIGdi.au3>
_WinAPI_ExtCreatePen ( $iPenStyle, $iWidth, $iBrushStyle, $iRGB [, $iHatch = 0 [, $aUserStyle = 0 [, $iStart = 0 [, $iEnd = -1]]]] )

Paramètres

$iPenStyle Une combinaison des attributs de type, de style, d'embout d'extrémité, et de jonction.
Les valeurs de chaque catégorie sont combinés en utilisant une opération sur les bits.
Le type du crayon peut prendre l'une des valeurs suivantes:
    $PS_GEOMETRIC
    $PS_COSMETIC

Le style du crayon peut prendre l'une des valeurs suivantes:
    $PS_SOLID
    $PS_DASH
    $PS_DOT
    $PS_DASHDOT
    $PS_DASHDOTDOT
    $PS_NULL
    $PS_INSIDEFRAME
    $PS_USERSTYLE
    $PS_ALTERNATE

L'extrémité est spécifié seulement pour les crayons géométriques et peut prendre l'une des valeurs suivantes:
    $PS_ENDCAP_ROUND
    $PS_ENDCAP_SQUARE
    $PS_ENDCAP_FLAT

La jointure est spécifié seulement pour les crayons géométriques et peut prendre l'une des valeurs suivantes:
    $PS_JOIN_BEVEL
    $PS_JOIN_MITER
    $PS_JOIN_ROUND
$iWidth La largeur du rayon.
Si le type $PS_GEOMETRIC est spécifié, la largeur est donnée en unités logiques, sinon, la largeur doit être définie à 1.
$iBrushStyle Le style du pinceau. Ce paramètre peut prendre l'une des valeurs constantes $BS_*.
$iRGB La couleur du crayon, en RVB.
$iHatch [optionnel] Le style de hachures. Pour plus d'informations, voir _WinAPI_CreateBrushIndirect().
$aUserStyle [optionnel] Le tableau (dash1, space1, dash2, space2,... dashN, spaceN) qui contient la longueur des tirets et des espaces dans un style défini par l'utilisateur. La première valeur indique la longueur du premier tiret, la deuxième valeur indique la longueur du premier espace, et ainsi de suite.
Ce paramètre est ignoré si le style $PS_USERSTYLE n'est pas spécifié. Le nombre de style est limité à 16.
$iStart [optionnel] L'index du tableau où commencer le remplissage.
$iEnd [optionnel] L'index du tableau où arrêter le remplissage.

Valeur de retour

Succès: Retourne le handle du crayon logique.
Échec: Retourne 0.

Remarque

Après qu'une application ait créé un crayon en appelant _WinAPI_ExtCreatePen(), elle peut le sélectionner dans n'importe quel contexte de périphérique en appelant la fonction _WinAPI_SelectObject().
Lorsqu'une application n'a plus besoin d'un crayon donné, elle doit appeler la fonction _WinAPI_DeleteObject() pour le supprimer.

En relation

_WinAPI_DeleteObject, _WinAPI_SelectObject

Voir aussi

Consultez ExtCreatePen dans la librairie MSDN.

Exemple

#include <APIGdiConstants.au3>
#include <GUIConstantsEx.au3>
#include <SendMessage.au3>
#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIHObj.au3>
#include <WinAPIRes.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>

; Crée une GUI
Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 310, 300)
Local $idPic = GUICtrlCreatePic('', 0, 0, 310, 300)
Local $hPic = GUICtrlGetHandle($idPic)

; Crée un bitmap
Local $hDC = _WinAPI_GetDC($hPic)
Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
Local $hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, 310, 300, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))
Local $hMemSv = _WinAPI_SelectObject($hMemDC, $hBitmap)

; Dessine des lignes avec différents attributs de type, style, exrémité, et jointure
Local $hPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_SOLID, $PS_ENDCAP_ROUND), 5, $BS_SOLID, 0)
Local $hSv = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_DrawLine($hMemDC, 20, 30, 289, 30)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteObject($hPen)

$hPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_DASH, $PS_ENDCAP_ROUND), 5, $BS_SOLID, 0)
$hSv = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_DrawLine($hMemDC, 20, 70, 289, 70)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteObject($hPen)

$hPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_DOT, $PS_ENDCAP_ROUND), 5, $BS_SOLID, 0)
$hSv = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_DrawLine($hMemDC, 20, 110, 289, 110)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteObject($hPen)

$hPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_DASHDOT, $PS_ENDCAP_SQUARE), 5, $BS_SOLID, 0)
$hSv = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_DrawLine($hMemDC, 20, 150, 289, 150)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteObject($hPen)

$hPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_DASHDOTDOT, $PS_ENDCAP_SQUARE), 5, $BS_SOLID, 0)
$hSv = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_DrawLine($hMemDC, 20, 190, 289, 190)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteObject($hPen)

Local $aStyle[6] = [1, 7, 1, 7, 1, 25]
$hPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_USERSTYLE, $PS_ENDCAP_ROUND), 5, $BS_SOLID, 0, 0, $aStyle)
$hSv = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_DrawLine($hMemDC, 20, 230, 289, 230)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteObject($hPen)

Local $hPattern = _WinAPI_LoadImage(0, @ScriptDir & '\Extras\Pen.bmp', $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE)
$hPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_SOLID, $PS_ENDCAP_ROUND), 5, $BS_PATTERN, 0, $hPattern, $aStyle)
$hSv = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_DrawLine($hMemDC, 20, 270, 289, 270)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteObject($hPattern)
_WinAPI_DeleteObject($hPen)

; Libère les objets
_WinAPI_ReleaseDC($hPic, $hDC)
_WinAPI_SelectObject($hMemDC, $hMemSv)
_WinAPI_DeleteDC($hMemDC)

; Définit le bitmap dans le contrôle Picture
_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
Local $hObj = _SendMessage($hPic, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
    _WinAPI_DeleteObject($hBitmap)
EndIf

GUISetState(@SW_SHOW)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE