UDF > WinAPIEx > GDI > Line & Curve >


_WinAPI_LineDDA

Détermine quels pixels doivent être mis en surbrillance sur une ligne

#include <WinAPIGdi.au3>
_WinAPI_LineDDA ( $iX1, $iY1, $iX2, $iY2, $pLineProc [, $pData = 0] )

Paramètres

$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.

Valeur de retour

Succès: Retourne True
Échec: Retourne False

Remarque

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.

Voir aussi

Consultez LineDDA dans la librairie MSDN.

Exemple

#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