在MFC中和定時器相關的有三個函數:
UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD) );
第一個參數為對應時器的代號。在一個程式中,可能有多個SetTimer,在Ontime響應時,可以根據第一個參數來確定是哪一個記時器所引起的事件。
第二個參數是設定的毫秒數
第三個參數為一個回呼函數的指標,用NULL的話,系統會把SetTimer產生的訊息加入訊息佇列中。我們大多數時候不在這裡實現,而是在OnTimer中,即我們經常把這個參數設為NULL。
afx_msg void OnTimer( UINT nIDEvent );
BOOL KillTimer( int nIDEvent ); =========================================================================
函數功能:
SetTimer用來定義一個定時器的屬性,如改定時器的ID,重新整理時間,處理函數。
OnTimer用來響應系統定義的WM_TIMER訊息,在這裡可以用switch語句實現對多定時器中的各個定時器分別響應。在這裡做當對應計時器到點時你想乾的事情,你有多大能耐就在這裡使多大能耐!
KillTimer用來結束一個定時器。
下面我們用一個例子來說明定時器的使用: 這個例子用來實現一個簡單的功能,就是在一個單文檔程式中,每間隔5秒彈出一個訊息框提示“定時器1”,每隔5秒彈出一個訊息框提示“定時器2”。
建立單文檔程式略,一路Next。
=========================================================================
(1)在CMainFrame的OnCreate函數中定義兩個定時器的屬性。
SetTimer(1,5000,0);
SetTimer(2,5000,0);
(2) CMainFrame中對WM_TIMER進行響應。
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent) {
case TIMEID1:
{
AfxMessageBox("定時器1!");
break;
}
case TIMEID2:
{
AfxMessageBox("定時器2!");
break;
}
default:
;
}
CFrameWnd::OnTimer(nIDEvent);
}
(3)在CMainFrame的解構函式中添加
KillTimer(IDTIMER1);
KillTimer(IDTIMER2);