计时器消息的处理
当不使用回调函数时程序会收到 WM_TIMER 消息, 这时只要像处理普通消息一样处理 WM_TIMER 消息就行了, 如果有多个计时器, 可以从 wParam 参数中根据计时器的ID作不同的处理, 例如:
case WM_TIMER:
switch(wParam)
{
case 1:
[处理ID为1的计时器]
break;
case 2:
[处理ID为2的计时器]
break ;
...
}
return 0 ;
(2)使用回调函数的计时器
当计时器创建时指定好回调函数时, 回调函数可以像下面的写法进行:
VOID CALLBACK TimerProc( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime )
{
[处理 WM_TIMER 消息]
}
当不同的计时器使用同一个回调函数时, 可以根据回调函数的 iTimerID 参数来区分不同的计时器
例如:
switch(iTimerID)
{
case 1: //处理ID为1的定时器
[...]
break;
case 2: //处理ID为2的定时器
[...]
break;
...
}
销毁计时器
BOOL KillTimer(
HWND hWnd, //窗口句柄
UINT_PTR uIDEvent //计时器ID
);
要销毁一个计时器, 必须知道该计时器的ID, 所以保留计时器的ID也是十分重要的, 你可以在任何时候销毁一个已经创建的计时器, 包括在处理计时器消息时。 最好在程序退出之前销毁完所有的已创建的计时器, 一个不错的办法是在处理 WM_DESTROY 消息时对于那些没有销毁的全部进行销毁。
需要注意的是, 当成功销毁一个计时器后, 该计时器所产生的 WM_TIMER 消息并不会从消息队列中移除, 如果消息队列中还有没有处理的 WM_TIMER 消息, 那么即使销毁了该计时器, 应用程序还是会有可能处理到没有处理完的 WM_TIMER 消息。