在每个 GUI 中都创建一个独立的计时器,然后使用 OnMessage()
函数或使用消息循环来处理定时器事件。下面是一个示例代码:
Gui +OwnDialogs +LastFound -Resize +AlwaysOnTop
Gui Add, Text,, Timer 1:
Gui Add, Text, vMyText2, Timer 2:
Gui 2:+LastFound; Create the second GUI with the +LastFound option
Gui 2:Add, Text,, Timer 3:
Gui 2:Add, Text, vMyText4, Timer 4:
Gui Show
roundNumber(number, decimals := 2) {
return Format("{:." . decimals . "f}", number)
}
SetTimer, UpdateTimers, 1000
UpdateTimers:
GuiControl,, MyText2, % roundNumber(A_TickCount/1000)
GuiControl,, MyText4, % roundNumber(A_TickCount/1000)
return
OnMessage(0x115) ; WM_TIMER
GuiControl,, MyText1, % roundNumber(A_TickCount/1000)
GuiControl,, MyText3, % roundNumber(A_TickCount/1000)
return
在这个示例中,我们使用 Gui +OwnDialogs
选项来确保当前 GUI 拥有自己的消息循环。我们创建了两个 GUI,每个 GUI 都有一个定时器和一些文本控件来显示计时器值。我们使用 SetTimer
函数来运行 UpdateTimers
函数,该函数定时更新所有文本控件的值。我们还使用 OnMessage()
函数来拦截所有 WM_TIMER
消息,并更新相关的文本控件。这样,每个 GUI 都有一个独立的定时器和一个处理它的消息循环,确保了在多个 GUI 中正确更新文本控件。