Dessine une ou plusieurs courbes de Bézier sans utiliser le point courant
#include <WinAPIGdi.au3>
_WinAPI_PolyBezier ( $hDC, Const ByRef $aPoint [, $iStart = 0 [, $iEnd = -1]] )
$hDC | Handle du contexte de périphérique. |
$aPoint | Le tableau 2D ([x1, y1], [x2, y2],..., [xN, yN]) qui contient les points d'extrémité et les points de contrôle des courbes, en unités logiques. Le nombre de points doit être un de plus que trois fois le nombre de courbes à dessiner, parce que chaque courbe de Bézier nécessite deux points de contrôle et un point d'extrémité, et la premier courbe nécessite un point de départ supplémentaire. |
$iStart | [optionnel] L'indxe du tableau où commencer à dessiner. |
$iEnd | [optionnel] L'index du tableau où arrêter de dessiner. |
Succès: | Retourne True |
Échec: | Retourne False |
Cette fonction dessine des courbes de Bezier cubiques en utilisant les points de terminaison et les points de contrôle spécifiés par le paramètre $aPoint.
La première courbe est dessinée à partir du premier point jusqu'au quatrième point en utilisant les deuxième et troisième points comme points de contrôle. Chaque courbe suivante dans la séquence nécessite exactement trois points: le point de terminaison de la courbe précédente est utilisé comme point de départ, les deux points suivants dans la séquence sont les points de contrôle, et le troisième est le point d'arrivée.
La position courante n'est ni utilisée ni mise à jour par la fonction _WinAPI_PolyBezier(). La figure n'est pas remplie.
Cette fonction dessine des lignes en utilisant le stylo courant.
Consultez PolyBezier dans la librairie MSDN.
#include <APIGdiConstants.au3> #include <FontConstants.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> #include <WinAPIMisc.au3> #include <WinAPIRes.au3> #include <WinAPISys.au3> #include <WinAPISysWin.au3> #include <WindowsConstants.au3> ; Crée une GUI Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 400, 400) Local $idPic = GUICtrlCreatePic('', 0, 0, 400, 400) Local $hPic = GUICtrlGetHandle($idPic) ; Crée un bitmap Local $hDev = _WinAPI_GetDC($hPic) Local $hDC = _WinAPI_CreateCompatibleDC($hDev) Local $hSource = _WinAPI_CreateCompatibleBitmapEx($hDev, 400, 400, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE))) Local $hSv = _WinAPI_SelectObject($hDC, $hSource) ; Dessine des objets Local $hOldBrush = _WinAPI_SelectObject($hDC, _WinAPI_GetStockObject($DC_BRUSH)) Local $hOldPen = _WinAPI_SelectObject($hDC, _WinAPI_GetStockObject($DC_PEN)) _WinAPI_SetDCBrushColor($hDC, 0x990404) _WinAPI_SetDCPenColor($hDC, 0x990404) Local $tRECT = _WinAPI_CreateRect(0, 0, 100, 100) _WinAPI_OffsetRect($tRECT, 30, 30) _WinAPI_Rectangle($hDC, $tRECT) _WinAPI_OffsetRect($tRECT, 20, 20) _WinAPI_InvertRect($hDC, $tRECT) _WinAPI_OffsetRect($tRECT, 20, 20) _WinAPI_InvertRect($hDC, $tRECT) _WinAPI_SetDCPenColor($hDC, 0x00A820) _WinAPI_SetBkColor($hDC, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE))) Local $hBrush = _WinAPI_CreateBrushIndirect($BS_HATCHED, 0x00A820, $HS_DIAGCROSS) Local $hObj = _WinAPI_SelectObject($hDC, $hBrush) $tRECT = _WinAPI_CreateRect(0, 0, 140, 140) _WinAPI_OffsetRect($tRECT, 220, 118) _WinAPI_Ellipse($hDC, $tRECT) _WinAPI_SelectObject($hDC, $hObj) _WinAPI_DeleteObject($hBrush) _WinAPI_SetTextColor($hDC, 0xCD0091) _WinAPI_SetBkMode($hDC, $TRANSPARENT) Local $hFont = _WinAPI_CreateFont(38, 0, 0, 0, $FW_NORMAL, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Arial Black') $hObj = _WinAPI_SelectObject($hDC, $hFont) _WinAPI_TextOut($hDC, 30, 185, 'Simple Text') _WinAPI_SelectObject($hDC, $hObj) _WinAPI_DeleteObject($hFont) Local $aPoint2[6][2] = [[0, 129],[55, 75],[75, 0],[95, 75],[150, 129],[75, 108]] Local $hRgn = _WinAPI_CreatePolygonRgn($aPoint2) _WinAPI_SetDCBrushColor($hDC, 0x0060C4) _WinAPI_OffsetRgn($hRgn, 25, 240) _WinAPI_PaintRgn($hDC, $hRgn) _WinAPI_DeleteObject($hRgn) Local $aPoint1[19][2] = [[50, 20],[70, 0],[70, 0],[90, 20],[100, 30],[110, 40],[120, 50],[130, 60],[130, 70],[120, 70],[110, 70],[30, 70],[20, 70],[10, 70],[10, 60],[20, 50],[30, 40],[40, 30],[50, 20]] _WinAPI_SetDCPenColor($hDC, 0xFF8000) _WinAPI_OffsetPoints($aPoint1, 219, 25) _WinAPI_PolyBezier($hDC, $aPoint1) $hBrush = _WinAPI_CreateBrushIndirect($BS_SOLID, 0xFF8000) $hObj = _WinAPI_SelectObject($hDC, $hBrush) _WinAPI_ExtFloodFill($hDC, 70 + 219, 40 + 25, 0xFF8000, 0) _WinAPI_SelectObject($hDC, $hObj) _WinAPI_SelectObject($hDC, $hObj) _WinAPI_DeleteObject($hBrush) _WinAPI_SetDCPenColor($hDC, 0xFFFFFF) Local $hPattern = _WinAPI_LoadImage(0, @ScriptDir & '\Extras\Pattern.bmp', $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE) ; $hPattern = _WinAPI_LoadBitmap (_WinAPI_GetModuleHandle (SystemDir & '\\ shell32.dll"), 138) $hBrush = _WinAPI_CreateBrushIndirect($BS_PATTERN, 0, $hPattern) $hObj = _WinAPI_SelectObject($hDC, $hBrush) $tRECT = _WinAPI_CreateRect(0, 0, 140, 90) _WinAPI_OffsetRect($tRECT, 220, 279) _WinAPI_RoundRect($hDC, $tRECT, 20, 20) _WinAPI_SelectObject($hDC, $hObj) _WinAPI_DeleteObject($hPattern) _WinAPI_DeleteObject($hBrush) ; Fusionne le bitmap Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDev, 400, 400) $hBrush = _WinAPI_SelectObject($hDC, $hOldBrush) _WinAPI_DeleteObject($hBrush) Local $hPen = _WinAPI_SelectObject($hDC, $hOldPen) _WinAPI_DeleteObject($hPen) _WinAPI_SelectObject($hDC, $hBitmap) _WinAPI_DrawBitmap($hDC, 0, 0, $hSource, $MERGECOPY) _WinAPI_ReleaseDC($hPic, $hDev) _WinAPI_SelectObject($hDC, $hSv) _WinAPI_DeleteObject($hSource) _WinAPI_DeleteDC($hDC) ; Définit le bitmap dans le contrôle Picture _SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap) $hObj = _SendMessage($hPic, $STM_GETIMAGE) If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap) EndIf GUISetState(@SW_SHOW) Do Until GUIGetMsg() = -3