MFC 定时器使用方式
MFC 定時器使用方式??
2011-04-30 12:24:58|??分類: 默認分類 |??標簽: |字號大中小?訂閱
用SetTimer函數 創建定時器
參數1表示定時器的ID,參數2表示時間間隔,最后一個參數是處理的函數,如果填NULL表示,使用系統默認的,默認處理函數是OnTimer()那個函數,在這里面寫你要執行的操作就可以了,如果你有多個定時器要在這里寫if(id == 1)類似的東西去區分不同的定時器,更換貼圖最好是在OnTimer里面更換當前顯示的圖片編號,然后刷新界面,更換圖片的工作讓OnPaint去做,讓他們各司其職。關閉定時器:KillTimer(1)
啟動計時器???
UINT?ID_TIMER1?=?1?,?ID_TIMER2?=?2???//設置id??
然后再你需要的時機依次啟動各個計時器:??
SetTimer(ID_TIMER1?,?300);??
……??
SetTimer(ID_TIMER2?,?400);??
……??
……??
OnTimer函數中這樣寫:??
void?CMyClass::OnTimer(UINT?nIDEvent)???
{??
????switch(nIDEvent)??
????{??
?????case?ID_TIMER1:??
?????????//?id為1的計時器要做的事。??
?????????……??
?????????break;??
?????case?ID_TIMER2:??
?????????//id為2的計時器要做的事。??
?????????……??
?????????break;??
?????……??
?????……??
????}??
}?
一??? SetTimer函數的用法
1)? 函數原型及變形
SetTimer這個API函數的原型 :
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定時器ID,多個定時器時,可以通過該ID判斷是哪個定時器
UINT uElapse, // 時間間隔,單位為毫秒
TIMERPROC lpTimerFunc // 回調函數
);
注意:設置第二個參數時要注意,如果設置的等待時間比處理時間短,程序就會出問題了。
回調函數:在這個函數里,放入你想要做的事情的代碼,你可以將它設定為NULL,也就是使用系統默認的回調函數,系統默認認的是onTime函數。
例如 :
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(1,1000,NULL);
2)函數生成方法
在ClassWizard里,選擇需要計時器的類,添加WM_TIME消息映射,就自動生成onTime函數了。然后在函數里添加代碼,讓代碼實現功能。
每隔一段時間就會自動執行一次。
3) 回調函數的格式
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
二. 多個Timer
把ID的值設為〉1的數,如:SetTimer(3,500,NULL);
由WINDOWS會協調他們的然onTimer函數要在函數體內添加每一個timer的處理代碼:
onTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:........;
break;
case 2:.......;
break;
case 3:......;
break;
}
三、KillTimer:取消定時器不再使用定時器后,我們應該調用KillTimer來取消定時。
?????? KillTimer的原型:
????????????? BOOL KillTimer(HWND hWnd,????????? // 窗口句柄
?????? ????????????? UINT_PTR uIDEvent?? // ID);
?????? 在MFC程序中我們可以直接調用KillTimer(int nIDEvent)來取消定時器。
總結
以上是生活随笔為你收集整理的MFC 定时器使用方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: avi编码格式以及查看的视频编码方式的小
- 下一篇: java虚拟机常用命令工具