Windows应用程序中经常使用定时器,可以在应用程序中设置定时器,定时器是过一段时间操作系统给程序员写的应用程序发送一条定时消息WM_TIMER。
定时器的设置:SetTimer(窗口,定时器ID,定时时间,回调函数地址);
定时器的停止:KillTimer(窗口,定时器ID);
定时器的设置是在WinMain函数或WM_CREATE消息的时候设置的,而停止时在WinMain函数或WM_DESTROY消息处理的时候。
定时器的三种处理形式:1在窗口过程中处理;2在一个函数中处理;3特殊用法
(一) 在窗口过程中处理
a 设置定时器:在WinMain函数或者是WM_CREATE消息处理的时候添加
SetTimer(相应窗口,定时器ID,定时时间,NULL);
b 定时器消息的逻辑处理:在窗口过程中处理
case WM_TIMER:
switch(wParam)
{
case ID1:
{.....}
break;
.....
}
return 0;
c 定时器的停止:在WinMain函数或WM_DESTROY消息处理时,进行处理
KillTimer(窗口,定时ID);
2 在一个函数中处理
将定时器消息发送到一个函数进行处理。(回调函数)
a 设置定时器:
与第一种方法是设置的位置是一样的,但是SetTimer()函数的参数不一样,第一个参数不是NULL,而是回调函数的地址
SetTimer(窗口,定时ID,定时时间,回调函数的地址);
b 停止定时器
与第一种方法是一样的
c 回调函数的编写
定义:
VOID CALLBACK 名称(TiimeProc) (HWND hwnd, UINT message, UINT iTimerID,DWORD dwTime)
{
WM_TIMER消息的处理;
}
3 特殊用法
这种方式也是使用回调函数的方式
但是它的设置和停止也有一定区别,设置的时候与第二种的差别就是SetTimer()的函数的参数,第一个是NULL,第二个是0。。。就没有对应窗口,也没有定时ID
取消的时候是对应窗口是NULL。当然回调函数的窗口句柄也是NULL。这种方式有特殊的用途,但是一般很少用到。