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中定时器的使用

近期在编一个扫雷游戏时,用到了定时器。其实在C++中定时器的应用非常广泛,例如录音的时候采样频率的控制,俄罗斯方块游戏发射子弹的频率以及前面介绍的扫雷游戏中都有用到定时器函数。总结一下,主要还是因为定...
  • shufac
  • shufac
  • 2014年02月27日 23:37
  • 2659

MFC中定时器的使用方法

定时器宏定义 #define TIMER1 1 #define TIMER2 2 在启动处设置定时器 SetTimer(TIMER1,500,NULL); //500毫秒 SetTimer(TIMER...
  • yimiyangguang185
  • yimiyangguang185
  • 2016年09月20日 23:04
  • 2279

MFC常用类:定时器Timer

imer事件,即定时器事件,是在游戏编程中,经常使用的一个事件。借助它可以产生定时执行动作的效果。这篇文章,就和大家一起探讨一下如何使用SetTimer()函数。            1、Se...
  • lien0906
  • lien0906
  • 2014年12月15日 22:12
  • 1797

<MFC实践>定时器详解及其简单实例二则

本文目的:掌握GDI对象的简单应用! 本文
  • EbowTang
  • EbowTang
  • 2014年08月03日 21:38
  • 2737

MFC定时器SetTimer函数用法总结

CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用,而API函数SetTimer则没有这个限制,这是一个很重要的区别。 1、启动定时器。        启动定时器就需要使用CWn...
  • u013541325
  • u013541325
  • 2014年11月15日 10:24
  • 11083

在MFC的对话框中使用定时器

在对话框中使用定时器: 1.定义定时器 #define TIMER1 1 2.开启定时器 在需要开启定时器的地方加入:SetTimer(TIMER1,1000,NULL);//...
  • hefeng91
  • hefeng91
  • 2016年08月19日 14:19
  • 151

MFC中使用多个timer定时器

1,在MFC中添加WM_TIMER消息处理函数会生成      void CFaceDetectDlg::OnTimer(UINT_PTR nIDEvent)...
  • libin88211
  • libin88211
  • 2014年05月10日 16:55
  • 3352

MFC 线程学习笔记之定时器

1.首先建立一个vs2010 对话框程序 2.然后在类的对话框下添加CTimeDlag 的WM_TIMER()方法,双击此方法,然后编辑响应函数,具体代码如下: void CTimeDlg...
  • robinson_911
  • robinson_911
  • 2014年01月13日 22:15
  • 777

VC/MFC 定时器设置及OnTimer使用

OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 粗略的说,Settimer是设置一个...
  • ccfxue
  • ccfxue
  • 2016年04月21日 16:44
  • 750

非窗口类中使用定时器的方法

非窗口类中使用定时器的方法(一)         jemmylau(原作)                 关键字           Visual   C++   MFC   类   定时器   静...
  • zhanghefu
  • zhanghefu
  • 2008年06月05日 16:10
  • 2583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC定时器的使用
举报原因:
原因补充:

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