簡體   English   中英

計時器超時重置

[英]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()重新計算超時時間。 不幸的是,這不會發生。

我錯過了什么?

我認為您誤解了文檔。

要改變現有的計時器,你必須通過相同的組合hWndnIDEventlpTimerFunc參數,當您最初稱為SetTimer

參考

如果hWnd參數不為NULL,並且由hWnd指定的窗口已經具有值為nIDEvent的計時器,則現有計時器將被新計時器替換。

也:

計時器標識符nIDEvent特定於關聯的窗口。 另一個窗口可以擁有自己的計時器,該計時器具有與另一個窗口擁有的計時器相同的標識符。 計時器是不同的。

僅最后一個引號就足以證明您始終必須指定hWnd參數才能修改與窗口關聯的現有計時器。 否則,系統應如何知道您要更改哪個計時器? 您可能有兩個窗口,每個窗口的計時器ID為1,這是兩個不同的計時器!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM