Я использую таймер для рисования анимации, но я хочу, чтобы скорость анимации изменялась при вводе пользователем.
В документации API я прочитал:
Дескриптор окна, которое будет связано с таймером. Это окно должно принадлежать вызывающему потоку. Если передается значение NULL для hWnd вместе с nIDEvent существующего таймера, этот таймер будет заменен так же, как будет существующий таймер не NULL hWnd.
Я понял, что должен вызывать функцию SetTimer()
без параметра hWnd
для сброса таймера, поэтому я сделал:
// объявление функции
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()
. К сожалению, этого не происходит.
Что я пропустил?