Ich habe weitere Funktionen portiert (siehe Anhang).
Hier ein weiteres Beispiel.
AutoIt
;Coded by UEZ build 2024-03-26 beta
#AutoIt3Wrapper_UseX64=y
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPIGdi.au3>
#include "Cairo.au3"
AutoItSetOption('MustDeclareVars', 1)
Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi, $f2PI = $fPi * 2
Global Const $iW = 960, $iH = 540, $sTitle = "Cairo Test (" & (@AutoItX64 ? "64" : "32") & " Bit) / FPS: "
Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit
AutoItSetOption("GUIOnEventMode", 1)
Cairo_Example()
AutoItSetOption("GUIOnEventMode", 0)
Func Cairo_Example()
If Not Cairo_Init() Then
ConsoleWrite(@error & @CRLF)
Exit
EndIf
Local $iStride = Cairo_GetStride($iW)
$hGUI = GUICreate($sTitle & "0", $iW, $iH)
Local Const $hDC = _WinAPI_GetDC($hGUI)
Local Const $hGfxDC = _WinAPI_CreateCompatibleDC($hDC)
Local $tBIV5HDR = DllStructCreate($tagBITMAPV5HEADER)
DllStructSetData($tBIV5HDR, 'bV5Size', DllStructGetSize($tBIV5HDR))
DllStructSetData($tBIV5HDR, 'bV5Width', $iW)
DllStructSetData($tBIV5HDR, 'bV5Height', -$iH)
DllStructSetData($tBIV5HDR, 'bV5Planes', 1)
DllStructSetData($tBIV5HDR, 'bV5BitCount', 32)
DllStructSetData($tBIV5HDR, 'biCompression', $BI_RGB)
Local $pBits
Local $hBitmapGDI = _WinAPI_CreateDIBSection($hGfxDC, $tBIV5HDR, $DIB_RGB_COLORS, $pBits)
Local Const $hObjOld = _WinAPI_SelectObject($hGfxDC, $hBitmapGDI)
GUISetState(@SW_SHOW, $hGUI)
$bExit = False
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
AdlibRegister("CalcFPS", 1000)
Local $pSurface = Cairo_Surface_CreateForData($pBits, $iW, $iH, $iStride)
Local $pContext = Cairo_Context_Create($pSurface)
Local $tMatrix = DllStructCreate($tagCairo_matrix) ;Global Const $tagCairo_matrix = "double xx;double yx;double xy;double yy;double x0;double y0;"
$tMatrix.x0 = $iW / 2
$tMatrix.y0 = $iH / 2
Local $t, $tt = 1 / 15, $b, $i, $q, $t1
Do
For $i = 50 To 1 Step -1
$q = $i / 3
$b = Sin($i / 9 - $t)
$t1 = $q * Sin($b)
$tMatrix.xx = $q * Cos($b)
$tMatrix.yx = $t1
$tMatrix.xy = -$t1
$tMatrix.yy = $tMatrix.xx
Cairo_Matrix_Transform($pContext, $tMatrix)
Cairo_SetColor($pContext, 1 - 1 / ($i / 4))
Cairo_FillRectangle($pContext, -48, -48, 96, 96)
Cairo_Matrix_ResetIdentity($pContext)
Next
_WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hGfxDC, 0, 0, $SRCCOPY)
$t += $tt
$iFPS += 1
If $bExit Then ExitLoop
Until Not Sleep(10)
Cairo_Context_Destroy($pContext)
Cairo_Surface_Destroy($pSurface)
_WinAPI_SelectObject($hGfxDC, $hObjOld)
_WinAPI_ReleaseDC($hGUI, $hDC)
_WinAPI_DeleteDC($hGfxDC)
_WinAPI_DeleteObject($hBitmapGDI)
GUIDelete($hGUI)
Cairo_Close()
EndFunc
Func _Exit()
$bExit = True
EndFunc ;==>_Exit_About
Func CalcFPS() ;display FPS
$iShowFPS = $iFPS
$iFPS = 0
WinSetTitle($hGUI, "", $sTitle & $iShowFPS)
EndFunc ;==>CalcFPS
Alles anzeigen
Ich habe massiv die UDF geändert, d.h. die UDF im 1. Post wird nicht funktionieren und die UDF im Anhang unten kann noch viele Copy/Paste oder andere Fehler beinhalten! Die DLL kann im 1. Post heruntergeladen werden.
Habt ihr Lust Beispiele zu erstellen? Dann bitte hier Posten.
Etliche Funktionen sind noch nicht portiert, aber ich arbeite daran...
Happy Ostern!