Remplit un rectangle ou un triangle en dégradé
#include <WinAPIGdi.au3>
_WinAPI_GradientFill ( $hDC, Const ByRef $aVertex [, $iStart = 0 [, $iEnd = -1 [, $bRotate = False]]] )
$hDC | Handle du contexte de périphérique. |
$aVertex | Le tableau 2D ([x1, y1, $iRGB1], [x2, y2, $iRGB2],..., [xN, yN, $iRGBN]) qui contient les sommets nécessaires au dégradé. Chaque sommet dans ce tableau contient les paramètres suivants. x - La coordonnée x, en unités logiques. y - La coordonnée y, en unités logiques rgb - Les informations de couleur au point (x, y). |
$iStart | [optionnel] L'index du tableau contenant le point où commencer le remplissage. |
$iEnd | [optionnel] L'index du tableau contenant le point où terminer le remplissage. |
$bRotate | [optionnel] Spécifie s'if faut remplir le rectangle du bord gauche au bord droit (dégradé horizontal). $bRotate est utilisé seulement pour les dégradés de rectangle, pour les dégradés de triangle ce paramètre sera ignoré, Valeurs valides: True - Remplit de gauche à droite. False - Remplit de haut en bas (par défaut). |
Succès: | Retourne 1. |
Échec: | Retourne 0. |
Si le nombre de sommets défini en utilisant des paramètres $iStart et $iEnd est 2, la fonction _WinAPI_GradientFill() remplit un rectangle. Si le nombre de sommets est égal à 3, elle remplit un triangle.
Pour le rectangle, les sommets doivent spécifier son coin supérieur gauche et inférieur droit.
Notez que le tableau $aVertex peut contenir un nombre quelconque de sommets de dégradé, mais seulement deux ou trois sommets peuvent être utilisés en même temps à partir du tableau.
Sinon, la fonction est échoue.
La fonction _WinAPI_GradientFill() peut seulement remplir un rectangle ou un triangle par appel. Utilisez plusieurs appels de cette fonction pour remplir des dégradés complexes.
Consultez GdiGradientFill dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> Local $aVertex[6][3] = [[0, 0, 0xFF0000],[400, 400, 0x00FF00],[0, 400, 0x0000FF],[0, 0, 0xFF0000],[400, 0, 0xFFFF00],[400, 400, 0x00FF00]] ; 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 dégradé Local $hDC = _WinAPI_GetDC($hPic) Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC) Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, 400, 400) Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap) _WinAPI_GradientFill($hDestDC, $aVertex, 0, 2) _WinAPI_GradientFill($hDestDC, $aVertex, 3, 5) _WinAPI_ReleaseDC($hPic, $hDC) _WinAPI_SelectObject($hDestDC, $hDestSv) _WinAPI_DeleteDC($hDestDC) ; Définit le dégradé du contrôle $hPic _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