关于OnTimer()函数的填写,对于CDialog,可以Ctrl+W中添加;

对于SetTimer可以在初始化当中添加!

OnTimer()函数是响应用SetTimer()函数设定的时钟发送的时钟消息的,你没设定时钟,就不会有时钟消息,OnTimer()里的语句当然也不会被调用。

为类添加VM_TIMER消息响应,会看到类中多了个OnTimer(UINT nIDEvent)。
然后用SetTimer(1,10,NULL)就行了。第一个参数是ID,第二个是间隔时间,单位是毫秒,第3个是响应函数,因为要在OnTimer(UINT nIDEvent)里面做响应操作,所以此处给个NULL就行了

Timer事件,即定时器事件,是在游戏编程中,经常使用的一个事件。借助它可以产生定时执行动作的效果。这篇文章,就和大家一起探讨一下如何使用SetTimer()函数。
1、SetTimer定义在那里?

SetTimer表示的是定义个定时器。根据定义指定的窗口,在指定的窗口(CWnd)中实现OnTimer事件,这样,就可以相应事件了。

SetTimer有两个函数。一个是全局的函数::SetTimer()

UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);

其中hWnd 是指向CWnd的指针,即处理Timer事件的窗口类。说道窗口类(CWnd),我们有必要来看一下CWnd的继承情况:CWnd有以下子类:CFrameWnd,CDialog,CView,CControlBar等类。这也意味这些类中都可以定义SetTimer事件。

同时,SetTimer()在CWnd中也有定义,即SetTimer()是CWnd的一个成员函数。CWnd的子类可以调用该函数,来设置触发器。

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

参数含义:

nIDEvent:是指设置这个定时器的iD,即身份标志,这样在OnTimer()事件中,才能根据不同的定时器,来做不同的事件响应。这个ID是一个无符号的整型。

nElapse

是指时间延迟。单位是毫秒。这意味着,每隔nElapse毫秒系统调用一次Ontimer()。

void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD)

Specifies the address of the application-supplied TimerProc callback function that processes the WM_TIMER messages. If this parameter is NULL, the WM_TIMER messages are placed in the application’s message queue and handled by the CWnd object。

意思是,指定应用程序提供的TimerProc回调函数的地址,来处里这个Timer事件。如果是NULL,处理这个Timer事件的定义这个Timer的CWnd对象。他将WM_TIMER消息传递给这个对象,通过实现这个对象的OnTimer()事件来处理这个Timer事件。

所以,一般情况下,我们将这个值设为NULL,有设置该定时器的对象中的OnTimer()函数来处理这个事件。

同样的,我们再看看KillTimer()和OnTimer()的定义:

KillTimer同SetTimer()一样,他也有两个,一个是全局的::KillTimer(),另一个是CWnd的一个函数。他的声明如下:

//全局函数

BOOL KillTimer(
HWND hWnd, // handle of window that installed timer
UINT uIDEvent // timer identifier
);

//CWnd函数

BOOL KillTimer( int nIDEvent );

这两个函数表示的意思是将iD为nIDEVENT的定时器移走。使其不再作用。其用法如同SetTimer()一样。

再看看OnTimer()

CWnd::OnTimer
afx_msg void OnTimer( UINT nIDEvent );

ontimer()是响应CWnd对象产生的WM_Timer消息。nIDEvent表示要响应TIMER事件的ID。

2、Timer事件的使用:

由以上的分析,我们应该很清楚,如何来使用Timer事件。假定我们在视图上画一个渐变的动画。我们首先在菜单栏上添加一个菜单项,给这个菜单添加命令响应:

pView->SetTimer(1,1000,NULL);//pView是视图类的指针,这里是在视图类当中设置一个定时器。

添加完毕,再给视图类添加一个WM_Timer事件的相应。在OnTimer()函数中编写函数,进行相应。

如此,就能做出动画。

Setimer和Ontimer的使用相关推荐

  1. OnTimer定时器使用踩坑实例和使用方法

    如果遇见一下问题,可能会有帮助: OnTimer进不去 非静态成员引用必须与特定对象相对报错 不知道怎么开启和设置定时器 首先:用SetTimer开启定时器 //设置定时器更新界面SetTimer(0 ...

  2. MFC中OnTimer函数的使用方法

    OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 粗略的说,Settimer是设置一个计时器并开始 ...

  3. C++ 定时器的用法:SetTimer和Ontimer

    摘要: Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所执行的代码. KillTimer用于停止计时器. Settimer是设置,Ontimer是响应S ...

  4. SetTimer OnTimer WM_TIMER

    SetTimer(1, 2000, 0); void CTest::OnTimer(UINT nIDEvent) {     // TODO: Add your message handler cod ...

  5. flink onTimer定时器实现定时需求

    1. 业务需求 接收实时数据流数据,实时更新状态,并且每隔一定的时间,将所有状态数据输出. 实时数据类型:("张", 1) 状态更新:第一个元素为key,将第二个元素全部缓存起来, ...

  6. 用MFC中的SetTimer、OnTimer和KillTimer实现的简单计时器与倒计时的Demo

    MFC中的定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 简单的说,Settimer是设置一个计时器,当Settimer设置的时间到了,就会 ...

  7. 关于Ontimer()函数

    关于OnTimer() OnTimer()函数是响应用SetTimer()函数设定的时钟发送的时钟消息的,你没设定时钟,就不会有时钟消息,OnTimer()里的语句当然也不会被调用. 为类添加VM_T ...

  8. 传奇定时器OnTimer功能详解(泡点、时间触发、任务活动)

    定时器功能,是传奇服务端中非常常见的一种功能,常见如:泡点脚本.赌博脚本,任务活动指定时间刷怪,时间触发一些都需要用到OnTimer功能,定时器总共有19个定时器可以开启.我们在添加新的定时器的时候我 ...

  9. 2021年大数据Flink(四十一):​​​​​​​Flink实现订单自动好评

    目录 Flink实现订单自动好评 需求 数据 编码步骤 1.env 2.source 3.transformation 4.sink 5.execute 参考代码 参考效果 实现代码: Flink实现 ...

最新文章

  1. 安徽省计算机一级文化基础,计算机一级文化基础选择题
  2. OpenStack 系列文章
  3. Powershell 命令行泄漏下一个 Windows 10 更新内容
  4. selenium如何在同一个窗口页面中返回上一个页面窗口(Python)。
  5. 重装oracle12c_记一次win server 2012上oracle12c的安装过程
  6. python根据月份获取月初月末_用python获取月末数据
  7. pytorch | transpose、permute、view、contiguous、is_contiguous、reshape
  8. linux pcre静态编译,Linux下,Nginx部署静态网站
  9. php页面运用文本编辑器的实例,TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析...
  10. vue-lazyload的使用
  11. Linux安装python环境方法
  12. 驾驶证学法减分助手小程序源码(带搭建视频教程)
  13. linux驱动工程面试必问知识点
  14. python 提示按任意键退出_详解Python实现按任意键继续/退出的功能 python请按任意键继续 什么意思...
  15. 高速电路PCB布局布线参考
  16. 位运算符详解(与,或,非,异或)
  17. 【java】剑指offer46_把数字翻译成字符串
  18. ROS 2 Humble Hawksbill 官方文档
  19. 像素、分辨率、DPI、PPI
  20. 疯狂的程序员(绝影)

热门文章

  1. dns 主从 windows
  2. 自定义可扩展叠加头部的下拉控件
  3. Git教程(二)-如何上传和同步自己的git项目
  4. Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
  5. Struts2国际化——完整实例代码
  6. ExtAspNet公司项目截图
  7. 数字签名和加密的基本原理及其区别?
  8. (转贴) ArcIMS初级教程(1)
  9. container and Injection
  10. 京东资深架构师代码评审歪诗