-
TimerProc
鎖定
- 中文名
- 計時器過程
- 外文名
- TimerProc
- 參數個數
- 4
TimerProc定義
void CALLBACK Timerproc( HWND unnamedParam1, UINT unnamedParam2, UINT_PTR unnamedParam3, DWORD unnamedParam4 ) {...}
TimerProc應用
如果在程序的整個執行過程中使用計時器,一般在處理WM_CREATE消息時或WinMain中消息循環前調用SetTimer,在處理WM_DESTROY消息時或在WinMain中消息循環後返回前調用KillTimer。根據SetTimer中的參數不同,有三種方法使用計時器,TimerProc與其中兩種有關。
TimerProc方法一
在SetTimer時指定窗口句柄hWnd,nIDEvent中指定計時器ID,將lpTimerFunc置NULL從而不使用TimerProc。使用SetTimer中指定的句柄和ID,在窗口過程中處理WM_TIMER消息。
[2]
最好使用#define定義計時器的ID,例如:
#define ID_TIMER 1 SetTimer(hWnd, ID_TIMER, 1000, NULL); //消息循環 KillTimer(hWnd, ID_TIMER);
TimerProc方法二
調用SetTimer時指定窗口句柄hWnd,nIDEvent中指定計時器ID,lpTimerFunc指定為TimerProc函數的指針。這種方法無需在窗口過程中處理WM_TIMER消息,而使用TimerProc函數(名字可自定)處理WM_TIMER消息:
[2]
void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) { //處理消息 }
TimerProc的參數hwnd是在調用SetTimer時指定的窗口句柄。Windows只把WM_TIMER消息送給TimerProc,因此消息參數總是等於WM_TIMER。iTimerID值是計時器ID,dwTimer值是與從GetTickCount函數的返回值相容的值。這是自Windows啓動後所經過的毫秒數。
TimerProc方法三
調用SetTimer時不指定窗口句柄(為NULL),iTimerID參數自然被忽略,lpTimerFunc指定為TimerProc的指針。此時SetTimer的返回值是新建立的計時器的ID,需將這個ID保存以供KillTimer銷燬計時器時所用。當然,KillTimer的hWnd參數也置為NULL。這種方法同樣用TimerProc處理消息。
[2]
UINT_PTR iTimerID; iTimerID = SetTimer(NULL, 0, 1000, TimerProc); //消息循環 KillTimer(NULL, iTimerID);
使用這種方法的好處是不必自己指定計時器ID,這樣就不必擔心用錯ID。
- 參考資料
-
- 1. TIMERPROC (winuser.h) .MSDN.2018-12-05[引用日期2021-06-06]
- 2. SetTimer function (winuser.h) .MSDN.2018-12-05[引用日期2021-06-06]