以下示例使用SetTimer功能创建两个计时器。第一个定时器设置为每10秒钟,第二个定时器每5分钟一次。
//设置两个计时器。
SetTimer(hwnd, //主窗口的句柄
IDT_TIMER1, //计时器标识符
10000, // 10秒间隔
(TIMERPROC) NULL); //无定时器回调
SetTimer(hwnd, //主窗口的句柄
IDT_TIMER2, //计时器标识符
300000, // 5分钟间隔
(TIMERPROC) NULL); //无定时器回调
要处理由这些定时器生成的WM_TIMER消息,请将WM_TIMER case语句添加到【HWND】参数的窗口过程中。
case WM_TIMER:
开关(wParam)
{
case IDT_TIMER1:
.
. //处理10秒计时器。
.
return 0;
case IDT_TIMER2:
.
. //处理5分钟计时器。
.
return 0;
}
应用程序还可以创建一个计时器,其定时器的主窗口过程不是由主窗口过程而是由应用程序定义的回调函数来处理,如下面的代码示例,它创建一个定时器,并使用回调函数MyTimerProc来处理定时器WM_TIMER消息。
//设置定时器。
SetTimer(hwnd, //主窗口的句柄
IDT_TIMER3, //计时器标识符
5000, // 5秒间隔
(TIMERPROC) MyTimerProc); //定时器回调
MyTimerProc的调用约定必须基于Microsoft Win32回调函数TimerProc.
如果您的应用程序创建一个定时器而不指定窗口句柄,则您的应用程序必须监视WM_TIMER消息的消息队列,并将其发送到相应的窗口。
HWND hwndTimer; //定时器消息的窗口句柄
MSG msg; //消息结构en
while (GetMessage(&msg, //消息结构en
NULL, //处理窗口接收消息
NULL, //最低消息检查
NULL)) //最高讯息检查
{
//将WM_TIMER消息发送到hwndTimer过程。
if (msg.message == WM_TIMER)
{
msg.hwnd = hwndTimer;
}
TranslateMessage(&msg); //转换虚拟键代码
DispatchMessage(&msg); //将消息发送到窗口
}