Détermine quels pixels doivent être mis en surbrillance sur une ligne
#include <WinAPIGdi.au3>
_WinAPI_LineDDA ( $iX1, $iY1, $iX2, $iY2, $pLineProc [, $pData = 0] )
$iX1 | Coordonnée x, en unités logiques, du point de départ de la ligne. |
$iY1 | Coordonnée y, en unités logiques, du point de départ de la ligne. |
$iX2 | Coordonnée x, en unités logiques, du point de fin de la ligne. |
$iY2 | Coordonnée y, en unités logiques, du point de fin de la ligne. |
$pLineProc | Pointeur sur une fonction de rappel définie par l'application. |
$pData | [optionnel] Pointeur sur des données définies par l'application. |
Succès: | Retourne True |
Échec: | Retourne False |
La fonction _WinAPI_LineDDA() passe les coordonnées de chaque point le long de la ligne, à l'exception du point de fin de ligne, à la fonction de rappel définie par l'application. Outre le passage des coordonnées d'un point, cette fonction passe toutes des données définies par l'application.
Consultez LineDDA dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> #include <WinAPISysWin.au3> #include <WindowsConstants.au3> Global $g_iCount = 0, $g_bColor = True Local $hLineProc = DllCallbackRegister('_LineProc', 'none', 'int; int; lparam ') Local $pLineProc = DllCallbackGetPtr($hLineProc) ; Crée une GUI Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 280, 280) Local $idPic = GUICtrlCreatePic('', 0, 0, 281, 281) Local $hPic = GUICtrlGetHandle($idPic) ; Crée un bitmap Local $hDC = _WinAPI_GetDC($hPic) Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC) Local $hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, 280, 280, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE))) Local $hMemSv = _WinAPI_SelectObject($hMemDC, $hBitmap) _WinAPI_LineDDA(40, 40, 240, 40, $pLineProc, $hMemDC) _WinAPI_LineDDA(240, 40, 240, 240, $pLineProc, $hMemDC) _WinAPI_LineDDA(240, 240, 40, 240, $pLineProc, $hMemDC) _WinAPI_LineDDA(40, 240, 40, 40, $pLineProc, $hMemDC) _WinAPI_ReleaseDC($hPic, $hDC) _WinAPI_SelectObject($hMemDC, $hMemSv) _WinAPI_DeleteDC($hMemDC) ; Définit le bitmap dans le contrôle _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 DllCallbackFree($hLineProc) Func _LineProc($iX, $iY, $hDC) If Not Mod($g_iCount, 10) Then $g_bColor = Not $g_bColor EndIf If $g_bColor Then _WinAPI_SetPixel($hDC, $iX, $iY, 0xFF0000) Else _WinAPI_SetPixel($hDC, $iX, $iY, 0xFFFFFF) EndIf $g_iCount += 1 EndFunc ;==>_LineProc