`
Riddick
  • 浏览: 634581 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

VC中OnTimer()函数

阅读更多

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

 

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

 

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

 

为类添加WM_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。

 

二、Timer事件的使用:

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

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

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

如此,就能做出动画。

分享到:
评论

相关推荐

    VC onTimer()函数实现秒表功能.rar

    VC 基于onTimer()函数实现秒表功能,时、分、秒、微秒都能设置,还可以随时清零。操作方法:点击开始按钮,秒表就开始工作了。本程序的另一个亮点是界面中的按钮做的也相当漂亮哦。

    VC里有关OnTimer的问题

    定时器实际上会触发WM_TIMER消息,然后自动调用OnTimer函数,不用显式调用 要用ClassWizard来建立OnTimer()消息响应哦,否则你手动添加的话可能会忘记添加消息映射宏。

    VC自动关机

    VC自动关机 ,重启等功能,挺容易懂,OnTimer函数

    C++使用onTimer()函数编写的秒表

    VC/C++源码,系统相关,秒表 C++使用onTimer()函数编写的秒表,时、分、秒、微秒都能设置,点击开始按钮,秒表就开始走动了,窗体上的那几个按钮做的相当漂亮,不少朋友以前专一做出这种按钮,今天竟然在这个秒表中...

    VC制作定时器计数器示例

    VC制作的定时器,计数器示例。 VC中没有现成的定时器控件,但是可以使用回调函数OnTimer()响应SetTimer()函数来完成定时、计数功能。

    VC 渐变文字.rar

    VC 制作渐变的文字,VC 渐变文字,文字的色彩会越来越暗,也会越来越亮,最终形成渐变文字...还需要再优化完善,具体思路是先安装一个定时器,通过CDC 类的SetTextColor 函数在OnTimer()函数中改变字符串的颜色。。。。

    VC驿站基础班无KEY高清C++教程下载地址

    ①、定时器相关函数讲解:SetTimer、OnTimer、KillTimer; ②、利用定时器实现动态显示时间; ③、改变CStatic控件的文字颜色。 7、MFC对话框程序响应鼠标及键盘消息 ①、MFC对话框程序响应鼠标点击消息; ②...

    进程管理模拟 VC++ mfc实现

    自己用mfc写的进程管理模拟程序。比较简单,用ontimer函数实现的时间片轮转。

    vc++实现非窗口类中使用定时器的方法

    vc++实现非窗口类中使用定时器的方法 没有用消息处理函数Ontimer

    VC6.0的MFC单文档实现坦克大战小游戏.rar

    VC6.0的MFC单文档实现坦克大战小游戏。在顶部随机产生三种不同形状的敌机(用矩形、三角形、圆形表示),每秒产生一个,产生哪一个是随机的(大量用到随机数)。横坐标是随机的,纵坐标开始都是0。敌机大小、速度...

    vc6.0贪吃蛇

    BUG很多。。。蛇永远不会死- -画蛇身体的函数写在OnPaint里面了,body数组是判断蛇是否装墙的,要在OnTimer对代码进行修改,思路是链表。第一次写,不喜勿喷,谢谢

    VC++6.0多媒体定时器位图透明钟表

    运行MyClocker.exe对话框应用程序,自动设置定时器SetTimer(1,1000,NULL),让void CMyClockerDlg::OnTimer(UINT nIDEvent)函数每一秒调用一张已经导入资源的钟表秒钟位图,同时声明新的变量来控制分针图和时针图...

    VC 写的定时器 计数器示例程序

    VC 写的定时器 计数器示例程序,定时器响应函数(在SetTimer()函数的最后一个参数可以指定一个回调函数,没有指定时采用默认的回调函数OnTimer()),变量声明必须在“{}”中。如图所示的例子中,左侧为定时器,右侧...

    windows编程资料大全

    但是,在Windows 2000中提供了一个新的函数:GetLastInputInfo(),这个函数使用结构 LASTINPUTINFO 作为参数: LASTINPUTINFO lpi; lpi.cbSize = sizeof(lpi); GetLastInputInfo(&lpi); 调用函数...

    C++ MFC实现飞机大战游戏

    在MFC的API函数中使用SetTimer()函数设置定时器,设置系统间隔时间,在OnTimer()函数中实现响应定时器的程序。 2.2 透明贴图实现技术  绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图...

    PT80-NEAT开发指南v1.1

    NEAT 开 发 指南 文档 适用于 PT80 系列 移动数据终端 版本记录 版本号 版本描述 发布日期 V 1.0 初始版本。 2012-04-12 V1.1 修改前三章内容 2012-09-25 目录 第一章 关于本手册.....................................

    由交通灯例子改版的闪烁圆

    根据网上的一个交通灯例子进行修改,实现下面这样一个功能: 画圆,然后定时显示不同的颜色,完成闪烁的功能。...2. OnDraw函数中绘图。 3. 响应WM_TIMER消息OnTimer,不断变换颜色。 其它。。。 大家好好玩。

    MFC制作的MP3

    ctrl+w打开类向导,如图,添加ontimer函数 代码如下: void CMp3Dlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CString mtime; Mp3 mp3; second++; ...

Global site tag (gtag.js) - Google Analytics