kill time(1);//停止計時器1。
SetTimer(2,20000,NULL);//啟動2號定時器,20秒後觸發OnTimer功能。
//下面是OnTimer函數的實現。
void OnTimer(單位事件)
{
開關(nIDEvent){
案例1:
//完成定時器1的功能。
打破;
案例二:
消磨時間(2);//殺死定時器2
SetTimer(1,Step,NULL);//啟動計時器1
打破;
}
}
編程中經常用到定時器。使用timer的方法比較簡單,壹般是告訴Windows壹個時間間隔,然後WINDOWS在這個時間間隔周期性的觸發程序。通常有兩種方法可以實現:發送WM_TIMER消息和調用應用程序定義的回調函數。
1.1使用WM_TIMER設置定時器。
請先看看API函數SetTimer的原型。
UINT_PTR設置定時器(
HWND hWnd,//窗口句柄
UINT_PTR nIDEvent,//定時器ID,當有多個定時器時,可以通過這個ID判斷是哪個定時器。
UINT uElapse,//時間間隔,以毫秒為單位。
TIMERPROC lpTimerFunc //回調函數
);
例如
SetTimer(m_hWnd,1,1000,NULL);//每1秒觸發壹次的計時器。
在MFC程序中SetTimer封裝在CWnd類中,所以調用時不需要指定窗口句柄,例如:
UINT SetTimer(1,100,NULL);
函數echo值是第壹個參數值1,表示這個定時器的ID號。
第二個參數表示在重新處理之前等待100毫秒。在這個方法中,第三個參數通常為空。
註意:在設置第二個參數時,需要註意的是,如果等待時間短於處理時間,程序就會出現問題。
1.2調用回調函數
該方法首先以下列格式編寫壹個回調函數。
void回調TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
然後使用setter (1,100,timer proc)函數構建壹個定時器,第三個參數是回調函數的地址。
第二,多定時器的實現和應用
我們在安裝定時器時給它分配壹個ID,當我們使用多個定時器時,這個ID就開始起作用了。
不使用MFC時,收到WM_TIMER消息時,WPARAM wParam中的值是定時器的ID。
使用MFC的時候,就更簡單了。我們可以在WM_TIME的Timer上添加消息處理功能。請看下面的例子。
void CTimerTestDlg::on timer(UINT nIDEvent)
{
開關(nIDEvent)
{
案例24: ///處理ID為24的計時器。
draw 1();
打破;
案例25: ///處理ID為25的計時器。
draw 2();
打破;
}
CDialog::on timer(nIDEvent);
}
當妳使用回調函數時,我們可以根據nTimerid的值來判斷是哪個定時器,例如:
void回調TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
開關(nTimerid)
{
案例1: ///處理ID為1的計時器。
do 1();
打破;
案例2: ///處理ID為2的計時器。
do2();
打破;
}
}
第三,取消定時器
計時器不再使用後,我們應該調用KillTimer來取消計時。KillTimer的原型如下。
布爾殺手計時器(
HWND hWnd,//窗口句柄
UINT_PTR uIDEvent // ID
);
在MFC程序中,我們可以直接調用KillTimer(int nIDEvent)來取消定時器。