先請看SetTimer這個API函式的原型
UINT_PTR SetTimer(
HWND hWnd, // 視窗控制代碼
UINT_PTR nIDEvent, // 定時器ID,多個定時器時,可以透過該ID判斷是哪個定時器
UINT uElapse, // 時間間隔,單位為毫秒
TIMERPROC lpTimerFunc // 回撥函式
);
例如
SetTimer(m_hWnd,1,1000,NULL); //一個1秒觸發一次的定時器
在MFC程式中SetTimer被封裝在CWnd類中,呼叫就不用指定視窗控制代碼了
於是SetTimer函式的原型變為:
UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))
當使用SetTimer函式的時候,就會生成一個計時器。函式中nIDEvent指的是計時器的標識,也就是名字。nElapse指的是時間間隔,也就是每隔多長時間觸發一次事件。第三個引數是一個回撥函式,在這個函數里,放入你想要做的事情的程式碼,你可以將它設定為NULL,也就是使用系統預設的回撥函式,系統預設認的是onTime函式。這個函式怎麼生成的呢?你需要在需要計時器的類的生成onTime函式:在ClassWizard裡,選擇需要計時器的類,新增WM_TIME訊息對映,就自動生成onTime函數了。然後在函數里新增程式碼,讓程式碼實現功能。每隔一段時間就會自動執行一次。
例:
SetTimer(1,1000,NULL);
1:計時器的名稱;
1000:時間間隔,單位是毫秒;
NULL:使用onTime函式。
當不需要計時器的時候呼叫KillTimer(nIDEvent);
例如:KillTimer(1);
當要使用回撥函式時,
此方法首先寫一個如下格式的回撥函式
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
然後再用SetTimer(1,100,TimerProc)函式來建一個定時器,第三個引數就是回撥函式地址。
或許你會問,如果我要加入兩個或者兩個以上的 timer怎麼辦?
繼續用SetTimer函式吧,上次的timer的ID是1,這次可以是2,3,4。。。。
SetTimer(2,1000,NULL);
SetTimer(3,500,NULL);
嗯,WINDOWS會協調他們的。當然onTimer函式體也要發生變化,要在函式體內新增每一個timer的處理程式碼:
onTimer(nIDEvent)
{
switch(nIDEvent)
case 1:........;
break;
case 2:.......;
case 3:......;
}
先請看SetTimer這個API函式的原型
UINT_PTR SetTimer(
HWND hWnd, // 視窗控制代碼
UINT_PTR nIDEvent, // 定時器ID,多個定時器時,可以透過該ID判斷是哪個定時器
UINT uElapse, // 時間間隔,單位為毫秒
TIMERPROC lpTimerFunc // 回撥函式
);
例如
SetTimer(m_hWnd,1,1000,NULL); //一個1秒觸發一次的定時器
在MFC程式中SetTimer被封裝在CWnd類中,呼叫就不用指定視窗控制代碼了
於是SetTimer函式的原型變為:
UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))
當使用SetTimer函式的時候,就會生成一個計時器。函式中nIDEvent指的是計時器的標識,也就是名字。nElapse指的是時間間隔,也就是每隔多長時間觸發一次事件。第三個引數是一個回撥函式,在這個函數里,放入你想要做的事情的程式碼,你可以將它設定為NULL,也就是使用系統預設的回撥函式,系統預設認的是onTime函式。這個函式怎麼生成的呢?你需要在需要計時器的類的生成onTime函式:在ClassWizard裡,選擇需要計時器的類,新增WM_TIME訊息對映,就自動生成onTime函數了。然後在函數里新增程式碼,讓程式碼實現功能。每隔一段時間就會自動執行一次。
例:
SetTimer(1,1000,NULL);
1:計時器的名稱;
1000:時間間隔,單位是毫秒;
NULL:使用onTime函式。
當不需要計時器的時候呼叫KillTimer(nIDEvent);
例如:KillTimer(1);
當要使用回撥函式時,
此方法首先寫一個如下格式的回撥函式
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
然後再用SetTimer(1,100,TimerProc)函式來建一個定時器,第三個引數就是回撥函式地址。
或許你會問,如果我要加入兩個或者兩個以上的 timer怎麼辦?
繼續用SetTimer函式吧,上次的timer的ID是1,這次可以是2,3,4。。。。
SetTimer(2,1000,NULL);
SetTimer(3,500,NULL);
嗯,WINDOWS會協調他們的。當然onTimer函式體也要發生變化,要在函式體內新增每一個timer的處理程式碼:
onTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:........;
break;
case 2:.......;
break;
case 3:......;
break;
}
}