什么时候我们需要用到SetTimer函数呢?当你需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数

了。使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通

常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。
  
1.1 用WM_TIMER来设置定时器

先请看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函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识,也就是名字,

nElapse指的是时间间隔 ,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数 ,在这个函数里,

放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函

数。 这个函数怎么生成的呢?你需要在需要计时器的类的生成onTime函数:在ClassWizard里,选择需要计时器

的类,添加WM_TIME消息映射,就自动生成onTime函数了 。然后在函数里添加代码,让代码实现功能。每隔一段

时间就会自动执行一次。

例:

SetTimer(1,1000,NULL); 
 
1:计时器的标识;

1000:时间间隔,单位是毫秒; 
 
NULL:使用onTime函数。 
 
当不需要计时器的时候调用KillTimer(nIDEvent); 
  
例如:KillTimer(1); 
 
1.2 调用回调函数

此方法首先写一个如下格式的回调函数(在SetTimer函数表示回调函数TIMERPROC不为空时,需要调用自定义的

回调函数 )

void CALLBACK TimerProc(


  HWND hWnd,


  UINT uMsg,


  UINT idEvent,


  DWORD dwTime


);

然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。

如果要加入两个或者两个以上的timer怎么办?

继续用SetTimer函数吧,上次的timer的ID是1,这次可以是2,3,4。。。。 
 
SetTimer(2,1000,NULL);

SetTimer(3,500,NULL);

嗯,WINDOWS会协调他们的。当然onTimer函数体也要发生变化,要在函数体内添加每一个timer的处理代码: 

 
onTimer(nIDEvent)  


{  


  switch(nIDEvent)  


  {  


   case 1:..;  


       break; 

 
   case 2:..;  


       break; 

 
   case 3:..;  


       break;  


  
}

}
 
   在使用定时器时注意SetTimer中表示定义时标识的nIDEvent参数,以及OnTimer或自定义的回调函数中

nIDEvent参数,还有KillTimer中的这个参数,如果要用它们对特定的定时器进行操作时,注意保持它们的一致。

MFC——SetTimer函数的用法相关推荐

  1. delphi中setTimer函数的用法

    delphisetTimer函数用来做定时器,可以实现每隔一段时间运行某个程序,需要用到两个函数,SetTimer函数和KillTimer函数. 下面是一个简单的例子: var i :Integer ...

  2. C++:MFC SetTimer定时执行某一函数;

    1.函数说明: 函数原型: SetTimer这个API函数的原型 : UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID ...

  3. windows中定时操作(SetTimer函数用法)

    最近需要在服务端定时执行某个操作,于是需要用到SetTimer函数.当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间 ...

  4. vc中定时器的使用 (2)SetTimer函数的使用

    什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...

  5. VC++中定时器SetTimer函数的应用总结

    什么时候我们需要用到SetTimer函数呢?当你 需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了.使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...

  6. c语言memcpy是什么,C语言memcpy函数的用法

    介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...

  7. MFC总结之CListCtrl用法及技巧(二)

    续第一篇:MFC总结之CListCtrl用法及技巧(一) http://blog.csdn.net/zwgdft/article/details/7560592 本篇重点介绍:禁止拖动表头.让第一列居 ...

  8. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  9. Python assert断言函数及用法

    Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...

  10. python中的counter()、elements()、most_common()和subtract()函数的用法

    python中的counter().elements().most_common()和subtract()函数的用法 counter()方法: class collections.Counter([i ...

最新文章

  1. 通俗讲java反射机制ioc,结合反射说明SpringIOC的实现原理
  2. 2018年深圳杯论文_全国大学生数学建模竞赛
  3. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)
  4. MySQL二进制日志文件的用法_数据恢复
  5. linux 常用操作指令(随时更新)
  6. [Python] L1-019. 谁先倒-PAT团体程序设计天梯赛GPLT
  7. 贝塞尔曲线的css实现——淘宝加入购物车基础动画
  8. linux log变色
  9. tensorflow不能安装问题之(wrapt)
  10. P1600 [NOIP2016 提高组] 天天爱跑步
  11. 【部署】蓝绿发布、滚动发布、灰度发布,有什么区别
  12. Emmet For Faster HTML CSS Workflow by Edwin Diaz
  13. 软件测试周刊(第33期):当夏季的光阴已然流逝
  14. Class ‘xxx‘ is public, should be declared in a file named ‘xxx.java‘
  15. POJ 1436.Horizontally Visible Segments-线段树(区间更新、端点放大2倍)
  16. 全网最详细的零基础动态web项目集成mybatis框架实现增删改查系统(案例+源码)
  17. 计算机社团动员大会发言稿,计算机科学与技术学院召开“2020年双创实践线上动员大会”...
  18. C++ Primer Plus_读书笔记_第2章 开始学习C++
  19. Android App性能优化之内存优化
  20. 浅谈arm嵌入式产品及相关应用

热门文章

  1. json转excel_json数据转换成excel表格
  2. 【工作技巧】防止电脑睡眠,让鼠标自动周期性的点击屏幕
  3. 修改表字段长度的操作,对业务是否有影响?
  4. 河北联通烽火HG680-J机顶盒破解安装教程
  5. 25款实用的桌面版博客编辑器
  6. 广数980td系列2级密码及相关操作
  7. python长沙_python 长沙
  8. 微信小程序使用阿里icon
  9. 20210422-微信刷脸支付获取调用凭证authinfo的时候,提示 rawdata无效
  10. Podfile的简单使用