MFC中使用定時器


OnTimer()函數用於實現定時控制功能,定時控制功能主要由下面三個函數共同實現:

SetTimer();     KillTimer();       OnTimer();

粗略的說,Settimer是設置一個計時器,Ontimer是計時器所執行的代碼。KillTimer用於停止計時器。

或者說Settimer是設置定時器的,Ontimer是響應Settimer消息的。當Settimer設置的時間到了,就會自動調動Ontimer()函數。

先了解下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函數的時候,就會生成一個計時器。
SetTimer函數中
nIDEvent指的是計時器的標識,也就是名字。
nElapse指的是時間間隔,也就是每隔多長時間觸發一次事件。
第三個參數是一個回調函數,在這個函數里,放入你想要做的事情的代碼,你可以將它設定為NULL,也就是使用系統默認的回調函數,系統默認的是OnTime函數。
 
這個函數怎么生成的呢?
你需要在需要計時器的類的生成onTime函數: 在ClassWizard里,選擇需要計時器的類,添加WM_TIMER消息映射,就自動生成OnTime函數了。
然后在函數里添加代碼,讓代碼實現功能。 每隔一段時間(SetTimer設置的時間)就會自動執行一次。
 
例:
SetTimer(1,1000,NULL);
1:計時器的名稱;
1000:時間間隔,單位是毫秒;
NULL:使用onTime函數。
當不需要計時器的時候調用KillTimer(nIDEvent);
例如:KillTimer(1);  //此處的ID號“1 ”應與SetTimer()中的ID號一致
 
如果需要要加入兩個或者兩個以上的 timer怎么辦?   
繼續用SetTimer函數吧,上次的timer的ID是1,這次可以是2,3,4......
  SetTimer(2,1000,NULL); //ID為2,定時1000ms   
  SetTimer(3,500,NULL);   //ID為3,定時500ms  
 WINDOWS會協調他們的。
當然OnTimer函數體也要發生變化,要在函數體內添加每一個timer的處理代碼:   
OnTimer(nIDEvent)  
{      
 switch(nIDEvent)      
 {            
  case 1:........;              
        break;            
  case 2:.......;                
        break;          
  case 3:......;              
        break;        
 }  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM