複製鏈接
請複製以下鏈接發送給好友

TimerProc

鎖定
TimerProc是一類用於處理WM_TIMER消息的回調函數,共有4個參數。在編寫此類函數時用户可使用任意函數名稱作為TimerProc。TIMERPROC類型是指向此類回調函數的指針 [1] 
中文名
計時器過程
外文名
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。
參考資料