可能不是很直观,但计时器确实算的上一个输入设备。当设置了一个定时器是,系统设置一个计时数,由windows系统接收到硬件的tick信号将计时数减去一定值,当减少到0时,系统在程序的消息队列中加入一条WM_TIMER消息。因此timer消息是个同步消息,与鼠标与键盘的输入一样通过getmesssage获取到消息之后在dispatch到对应的窗口中。定时器还是一种系统资源,若不再需要需要释放。故一下两个API成对使用,调用KillTimer时会清除掉消息队列里边的所有对应的WM_TIMER消息。
//设置定时器
UINT SetTimer(
HWND hWnd , //目标窗口句柄,或者lpTimerFunc的参数
UINT nIDEvent, //定时器的ID,自己定义,当为0时不指定id,由系统返回一个id,通过id管理(kill)定时器
UINT uElapse, //定时时间
TIMERPROC lpTimerFunc //回调处理函数
);
//释放定时器
BOOL KillTimer(
HWND hWnd, //目标窗口句柄
UINT uIDEvent //定时器的ID,自己定义
);
使用定时器通常要么通过窗口的消息处理函数处理定时器消息(方法一),要么通过设置的回调函数处理(方法二、方法三)。
方法一:
/*-----------------------------------------
BEEPER1.C -- Timer Demo Program No. 1
(c) Charles Petzold, 1998
-----------------------------------------*/
#include <windows.h>
//用宏定义定时器id
#define ID_TIMER 1
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
//建立框架
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Beeper1") ;
HWND hwnd ;
MSG msg