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]]]] )
$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. |
Succès: | Retourne le handle du crayon logique. |
Échec: | Retourne 0. |
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.
_WinAPI_DeleteObject, _WinAPI_SelectObject
Consultez ExtCreatePen dans la librairie MSDN.
#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