首页 > 编程语言 > 详细

MFC中OnTimer的应用

时间:2015-02-06 10:56:49      阅读:339      评论:0      收藏:0      [点我收藏+]
OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 粗略的说,Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,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_TIME消息映射,就自动生成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;    }   } 在控制台中使用定时器不能简单的SetTimer了事,这在控制台里这种SetTimer的方式是有点麻烦的,需要自己写消息循环投递WM_TIMER消息。其实在控制台里可以使用多媒体时钟来计时: example: //启动计时器 MMRESULT nIDTimerEvent = timeSetEvent( 1000,//延时1秒 0, TimeProc, 0, (UINT)TIME_PERIODIC); if( nIDTimerEvent == 0 ) cout<<"启动计时器失败"< #include using namespace std; void CALLBACK TimeProc( HWND hwnd, UINT message, UINT idTimer, DWORD dwTime); int main() { SetTimer(NULL,1,1000,TimeProc); MSG msg; while(GetMessage(&msg,NULL,0,0)) { if(msg.message==WM_TIMER) { DispatchMessage(&msg); } } return 0; } void CALLBACK TimeProc( HWND hwnd, UINT message, UINT idTimer, DWORD dwTime) { cout<<"a timer comming"<MFC中OnTimer的应用

原文:http://www.cnblogs.com/jack-jia-moonew/p/4276459.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!