本帖最后由 itzyx 于 2021-1-11 14:09 编辑
各位大佬,我想用GUI 画一个圆(一个点的运动轨迹是圆),备注:是从原点开始的 像素点,第一,轨迹是不连贯的,不会连在一起; 第二, 可以调节像素点的运动速度;#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIGdi.au3>
#include <StaticConstants.au3>
Global $hDC, $hPen_Background, $hPen_Progress, $obj_orig
Global Const $_color_Background = 0x000000 ; 画线进度条的底色
Global Const $_color_Progress = 0x0000ff ; 画线进度条的前景色
Global Const $start_x = 920 ; 圆心x
Global Const $start_y = 500 ; 圆心y
Global Const $length = 400 ; 半径
Global Const $width = 5 ; 宽度
Global Const $Label1_l = 60 ; $Label1 的宽度
Global Const $Label1_h = 17 ; $Label1 的高度
Global Const $Label1_x = $start_x - Int($Label1_l / 2) - 2 ; $Label1 的位置x
Global Const $Label1_y = $start_y - 15 ; $Label1 的位置y
$Form1 = GUICreate('曝光测试',1840,960,-1,-1)
$button1 = GUICtrlCreateButton("开始", 20, 920, 130, 30)
$button2 = GUICtrlCreateButton("停止", 200, 920, 130, 30)
$Label1 = GUICtrlCreateLabel("0/0", $Label1_x, $Label1_y, $Label1_l, $Label1_h, $SS_CENTER)
GUISetBkColor(0x000000)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $button1
_Main()
EndSwitch
WEnd
Func _Main()
_LineProgress_prep() ; 准备
Local $i_num = 10; 总个数
Local $i_progress
For $i = 1 To $i_num
; 代码
Sleep(100)
$i_progress = Int($i / $i_num * 360)
_LineProgress_draw($i_progress) ;画进度线
GUICtrlSetData($Label1, $i & "/" & $i_num)
Next
_LineProgress_clean() ; 清除画线
EndFunc ;==>_Main
Func _LineProgress_prep() ; 准备
$hDC = _WinAPI_GetWindowDC($Form1) ; 场景
$hPen_Background = _WinAPI_CreatePen($PS_SOLID, $width, $_color_Background)
$hPen_Progress = _WinAPI_CreatePen($PS_SOLID, $width, $_color_Progress)
$obj_orig = _WinAPI_SelectObject($hDC, $hPen_Background) ; 使用画底色的笔。
_WinAPI_MoveTo($hDC, $start_x, $start_y - $length)
$obj_orig = _WinAPI_SelectObject($hDC, $hPen_Progress) ; 使用画前景色的笔
EndFunc ;==>_LineProgress_prep
Func _LineProgress_draw($_progress) ;画进度线
;~ $_progress 范围: 0-360
_WinAPI_MoveTo($hDC, $start_x, $start_y - $length)
_WinAPI_AngleArc($hDC, $start_x, $start_y, $length, 90, -$_progress)
EndFunc ;==>_LineProgress_draw
Func _LineProgress_clean() ; 清除资源
; 清除画线
_WinAPI_RedrawWindow($Form1)
; 清除资源
_WinAPI_SelectObject($hDC, $obj_orig)
_WinAPI_DeleteObject($hPen_Background)
_WinAPI_DeleteObject($hPen_Progress)
_WinAPI_ReleaseDC(0, $hDC)
EndFunc ;==>_LineProgress_clean
这个代码能画出实线,我想改成 一个点的运动,不连成线, 不按停止会一直运动, 如果按停止 会在一个固定的位置,呈现的是一个像素点。 这方面的知识我是一点不懂,希望各位大佬能指点一二,感谢(自己摸索了一下,实现了基本的功能)
|