[英]Timer time-out reset
我使用計時器繪制動畫,但是我希望動畫的速度根據用戶輸入而改變。
在API的文檔中 ,我讀到:
與計時器關聯的窗口的句柄。 該窗口必須歸調用線程所有。 如果將hWnd的NULL值與現有計時器的nIDEvent一起傳遞,則將以與現有非NULL hWnd計時器相同的方式替換該計時器。
我知道應該在沒有hWnd
參數的情況下調用SetTimer()
函數來重置計時器,所以我做到了:
//函數聲明
void InitiateTimer(HWND hWnd)
{
SetTimer(hWnd, // handle to main window
IDT_TIMER, // timer identifier
1000 / Robot_Settings::getSpeed(), // 1-second interval / speed
(TIMERPROC)NULL); // no timer callback
timerInitiated = true;
}
void ResetTimer()
{
SetTimer(NULL,
IDT_TIMER,
1000 / Robot_Settings::getSpeed(),
(TIMERPROC)NULL);
}
// WindowProc中的函數調用
case BUTTON_START:
stopClicked = false;
DestroyWindow(hStartButton);
CreateStopButton(hWnd);
if (!timerInitiated)
{
InitiateTimer(hWnd);
}
else if (timerInitiated)
{
ResetTimer();
}
return 0;
想法是在重置時,將根據Robot_Settings::getSpeed()
重新計算超時時間。 不幸的是,這不會發生。
我錯過了什么?
我認為您誤解了文檔。
要改變現有的計時器,你必須通過相同的組合hWnd
, nIDEvent
和lpTimerFunc
參數,當您最初稱為SetTimer
。
從參考 :
如果hWnd參數不為NULL,並且由hWnd指定的窗口已經具有值為nIDEvent的計時器,則現有計時器將被新計時器替換。
也:
計時器標識符nIDEvent特定於關聯的窗口。 另一個窗口可以擁有自己的計時器,該計時器具有與另一個窗口擁有的計時器相同的標識符。 計時器是不同的。
僅最后一個引號就足以證明您始終必須指定hWnd
參數才能修改與窗口關聯的現有計時器。 否則,系統應如何知道您要更改哪個計時器? 您可能有兩個窗口,每個窗口的計時器ID為1,這是兩個不同的計時器!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.