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 定时器使用方式相关推荐

  1. MFC 定时器用法 SetTimer、KillTimer

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

  2. 【181018】基于MFC文档方式制作的飞碟射击游戏

    一款使用MFC文档方式编写的飞碟射击游戏,如上面截图所示,源码VC 6.0下编译通过. 源码下载地址:点击下载 备用下载地址:点击下载

  3. 【嵌入式系统开发15】STM32F103C8T6下通过定时器Timer方式实现时间的精准控制,实现串口通信并让LED等周期性地闪烁

    本文目的是主要介绍通过STM32F103C8T6采用定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务.请设置一个5秒的 ...

  4. 用定时器Timer方式实现LED周期性闪烁

    文章目录 一.环境配置 二.定时器简介 三.用STM32CubeMX配置工程 四.用Keil配置代码 五.运行效果 六.总结 七,参考资料 一.环境配置 软件:STM32CubeMX:6.6.1 Ke ...

  5. 51单片机实验 LED半秒闪烁 定时器0方式2 中断实现

    51单片机实验 LED半秒闪烁 定时器0方式2 中断实现 实验目的: P1.0接一个发光管,实现亮半秒灭半秒, 要求使用定时器0工作方式2,中断实现. C语言代码: #include "at ...

  6. MFC,ADO方式实现数据库操作

    参考: MSDN数据访问编程 (MFC/ATL): https://msdn.microsoft.com/zh-cn/library/kd4ck1tt.aspx?f=255&MSPPError ...

  7. 定时器实现方式之TimerTask、Timer

    在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了.定时器的实现方式有很多种,今天总结最简单的实现方式.java 1.3引入了定时器框架,用于在定时器上下文中控制线程的 ...

  8. 使用PY003基于外部中断+定时器的方式实现NEC红外解码

    写在前边 最近项目用到一款遥控器是38K红外载波,NEC协议的,找了很多帖子有看到用外部中断下降沿判断(但可惜判定数据的方式是while在外部中断里面死等的),有看到用100us定时器定时刷来判断,感 ...

  9. MFC下ODBC方式连接数据库

    本篇文章主要记录VS2010环境下,MFC ODBC方式连接SQL Server数据库,通过ODBC数据源连接配置. 1.数据库 首先确保在SQL Server中已经创建好了数据库,如我使用的是cha ...

最新文章

  1. 关于jquery的$.fn和$
  2. 单目相机的内外参标定
  3. Linux下升级安装Python-2.7.8版本
  4. sql 只取一条记录_后端程序员必备:书写高质量SQL的30条建议
  5. 【Python爬虫】Python3+selenium环境配置
  6. java线程中的task_Java线程(四):Timer和TimerTask
  7. 快速锁定Windows XP桌面的几个方法
  8. mysql active_GitHub - vipshop/drc: MySQL active-active replication solution.
  9. 对着IDEA 配置方式
  10. java代码实现PDF转DOC文档
  11. 两个一一对应的txt文本去重
  12. Postman测试Soap协议接口
  13. php 博饼 源代码,php实现中秋博饼小游戏
  14. phpstudy linux安装教程
  15. 机器学习 主成分分析(Principal Component Analysis)
  16. SSM服装销售商城,毕业论文+源码+包运行
  17. 安利好用的idea查看日志的插件Grep Consol
  18. 电话那头原来是个大美女
  19. iOS中 @synthesize 和 @dynamic 区别
  20. 【活动预告】说说对 Coding 新一年的期许, Filco 蓝牙无线机械键盘等你拿!

热门文章

  1. 计算机应用能力文字录入,2017全国专业技术人员计算机应用能力考试题库-Excel,Word,XP.pdf...
  2. 2-修改软件源让pip下载更快
  3. SDH光端机的应用介绍
  4. 什么是交换机?交换机的工作原理是什么?
  5. 【渝粤教育】广东开放大学 房屋建筑学 形成性考核 (50)
  6. Probability(概率) vs Likelihood(似然)
  7. java readline 超时_跳过Java中的BufferedReader readLine()方法
  8. php中间件怎么使用,laravel框架中间件简单使用方法示例
  9. network 拦截不到东西是怎么做到的?_都说读中职院校学不到东西,中职学生到底是怎么学习的?...
  10. 2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础