1、关于定时器(计时器)
Windows计时器是PC硬件和ROM BIOS架构下的计时器的一种相对简单的扩充。Windows本身处理硬件中断,Windows应用程序不拦截BIOS中断。
因为Windows应用程序从正常的消息队列中取得WM_TIMER消息,所以应用程序在进行其他处理时不必担心WM_TIMER消息会意外中断程序。
Windows应用程序不能以高于解析度的频率(Windows98, 每秒18.2次, WindowsNT,每秒约100次)接收WM_TIMER消息。
WM_TIMER消息是非同步的,在消息队列中是低优先级的,和WM_PAINT消息一样,只有在消息队列中没有其他消息时才接收它们。(由此可以知道WM_TIMER消息并不能准确地定时)
WIndows不能持续向消息队列中放入多个WM_TIMER消息,而是将多余的WM_TIMER消息组合成一个消息。
2、定时器的使用
方法一:
SetTimer(hwnd, TIMERID, uiMsecInterval, NULL);
KillTimer(hwnd, TIMERID);
方法二:
void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
处理WM_TIMER消息
}
SetTimer(hwnd, iTimerID, uiMsecInterval, TimerProc);
KillTimer(hwnd, iTimerID);
Windows发送WM_TIMER消息给TimerProc回调函数,而不是WndProc。
方法三:
iTimerID = SetTimer(NULL, 0, wMescInterval, TimerProc);
KillTimer(NULL, iTimerID);
3、GetLocalTime取得目前时间
SYSTEMTIME结构
typedef struct _SYSTEMTIME
{
WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour;
WORD wMinute; WORD wSecond; WORD wMilliseconds;
}SYSTEMTIME, *PSYSTEMTIME;
SYSTEMTIME结构主要用于GetLocalTime和GetSystemTime函数,GetSystemTime函数得到目前的世界时间。GetLocalTime函数得到当地时间,依据电脑所在时区。
此外,还有SetLoaclTime和SetSystemTime。
4、格式化时间
格式化日期和时间的最简单方法是:调用GetDataFormat 和GetTimeFormat函数
GetLocaleInfo函数取得与指定的“本地”有关的信息。
原型:int GetLocaleInfo(LCID Locale, LCTYPE LCType, LPTSTR lpLCData, int cchData);
参数:Locale :(long) 欲获得信息的“地方”ID,
5、WM_SETTINGCHANGE
如果使用者更改了任何系统设定,则会将WM_SETTINGCHANGE消息传送给所有的应用程序。