MFC定时器的使用

转载 2015年11月20日 13:01:16

参考:http://www.cnblogs.com/chengxuyuancc/archive/2012/06/08/2542269.html

MFC提供了3个定时器函数来完成有关定时器功能:

  1. UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)( HWNDUINTUINTDWORD) );  
  2. afx_msg void OnTimer( UINT nIDEvent );  
  3. BOOL KillTimer( int nIDEvent );  


参数说明:

UINT nIDEvent:定时器的ID,给定时器唯一的身份验证,如果在一个程序中有多个定时器可以用这个ID来确定是那个定时器发送的消息。
UINT nElapse: 定义刷新时间,即间隔多长时间刷新一次,单位是毫秒。
void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD):
这个回调函数中实现刷新时所做的操作,如在数据库中读取数据。但是我们大多数时候不在这里实现,而是在OnTimer中。


函数功能:

SetTimer用来定义一个定时器的属性,如改定时器的ID,刷新时间,处理函数。
OnTimer实际使用系统定义消息来响应WM_TIMER消息,在这里可以实现对多定时器中的各个定时器分别响应,这里才是定时程序大展宏图的地方。
KillTimer用来结束一个定时器。

下面我们用一个例子来说明定时器的使用:
   这个例子用来实现一个简单的功能,就是在一个单文档程序中,每间隔5秒弹出一个消息框提示“定时器1”,每隔7秒弹出一个消息框提示“定时器2”。
   建立单文档程序略,一路Next。

=========================================================================

(1)在resource.h中定义两个定时器的ID

  1. #define IDTIMER1  1  
  2. #define IDTIMER2  2  


(2)在CMainFrame的OnCreate函数中定义两个定时器的属性。
SetTimer(TIMEID1,5000,0);
SetTimer(TIMEID2,7000,0);

(3) CMainFrame中对WM_TIMER进行响应。

  1. oid CMainFrame::OnTimer(UINT nIDEvent)  
  2. {  
  3.     // TODO: Add your message handler code here and/or call default  
  4.     switch(nIDEvent) {  
  5.     case TIMEID1:  
  6.         {     
  7.             AfxMessageBox("定时器1!");  
  8.             break;  
  9.         }  
  10. case TIMEID2:  
  11.         {     
  12.             AfxMessageBox("定时器2!");  
  13.             break;  
  14.         }  
  15.     default:  
  16.         ;  
  17.     }  
  18.      
  19.     CFrameWnd::OnTimer(nIDEvent);  
  20. }  


 

(4)在CMainFrame的析构函数中添加

  1. KillTimer(IDTIMER1);  
  2. KillTimer(IDTIMER2);  


 

==============================

参考2

当执行到程序的某一行代码时,需要添加计时器,就用这条语句:

SetTimer(1, 1000, NULL);

参数如下:

UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse,
  void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD));

设置好后计时器立马生效,1秒后计时器发生中断,在代码所在的类中进行捕捉:

1.在该类的消息中添加:

  1. BEGIN_MESSAGE_MAP(CTab1, CDialog)  // CTab1是自己定义的一个类  
  2.     ...  
  3.     ON_WM_TIMER()  
  4.     ...  
  5. END_MESSAGE_MAP()  


 

2.所在的类中添加成员函数:

  1. void OnTimer(UINT_PTR nIDEvent);  

 

3.添加函数的代码,即捕捉后的执行代码:

  1. void CTab1::OnTimer(UINT_PTR nIDEvent)  
  2. {  
  3.     switch (nIDEvent)  
  4.     {  
  5.     case 1:  // 计时器1  
  6.                .... // 处理的代码  
  7.                KillTimer(1);  // 删除此计时器,否则计时器中断完后会自动重新开始计时,到下一次中断时还会发生新的中断  
  8.                break;  
  9.   
  10.     case 2:  // 计时器2  
  11.                .... // 处理的代码  
  12.                break;  
  13.     default:  
  14.                MessageBox("default: KillTimer");  
  15.                KillTimer(nIDEvent);  
  16.                break;  
  17.     }  
  18. }  

相关文章推荐

MFC定时器使用

  • 2012年04月20日 09:28
  • 133KB
  • 下载

MFC Timer定时器的使用+opencv播放视频

1.在需要添加定时器的类上右击,选择属性 2。单击消息按钮,列出了所有的消息,选择WM_TIMER消息,右击,添加,出现如图所示代码: 这里是添加定时器的响应事件的,即每隔一定的时...

MFC学习笔记之多对话框中使用定时器

http://www.debugease.com/vc/1917040.html 多个对话框可以共用一个定时器吗? 各位,我有这样一个问题:我要做一个多对话框的工程,里面有两个...

MFC编程--定时器使用

VC++的定时器使用转载自https://my.oschina.net/ypimgt/blog/61061VC++ WM_TIMER 定时器使用方法​ 在编程时,会经常使用到定时器...

MFC中定时器使用实例

使用定时器完成日期和时间的更新,可以直接运行的小例子。

MFC中定时器的使用

在MFC中和定时器相关的有三个函数: UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)( ...

MFC 定时器使用方式

巧妙地使用定时器能达到意想不到的效果,写界面的时候能实现渐变,也能帮助多线程控制等 我们知道,在VC的MFC中,已经为我们封装好了很多全面和强大的函数集,所以在MFC编程时,巧妙地调用MFC函数库可...

MFC中定时器OnTimer函数的使用

在MFC中经常我们需要对界面进行刷新更新数据或者状态,这就需要用到定时器,其实现函数为OnTimer,下面对其用法步骤(基于VS2010)进行简要说明:...

MFC中的定时器SetTimer的使用

定时器在VC中的使用频繁,以下讨论定义器的使用方法。 定时器的原型是: WINUSERAPI UINT WINAPI SetTimer ( HWND hWnd , UINT nIDEvent, U...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC定时器的使用
举报原因:
原因补充:

(最多只允许输入30个字)