admin管理员组文章数量:1567271
2024年5月18日发(作者:)
VC++中通过SetTimer函数创建并使用定时器
SetTimer函数可以用来创建或设置一个定时器,该函数创建的定时器
nElapse,vo(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))
当用法SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent
指的是计时器的标识,也就是名字。nElapse指的是时光间隔,也就
与Timer控件(定时器控件)效果相同。 当你想每隔一段时光执行一
是每隔多长时光触发一次大事。第三个参数是一个回调函数,在这个
件事的的时候,你可以用法它。 用法定时器的办法比较容易,通常告
函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就
知WINDOWS一个时光间隔,然后WINDOWS以此时光间隔周期性触发程序。
是用法系统默认的回调函数,系统默认认的是onTime函数。这个函数
通常有两种办法来实现:发送WM_TIMER消息和调用应用程序定义的回
怎么生成的呢?你需要在需要计时器的类的生成onTime函数:在
调函数。 SetTimer函数的使用 1.1 用WM_TIMER来设置定时器 先请
ClassWizard里,挑选需要计时器的类,添加WM_TIME消息映射,就
看SetTimer这个API函数的原型 UINT_PTR SetTimer( HWND hWnd,
自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。
// 窗口句柄 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可
每隔一段时光就会自动执行一次。 例: SetTimer(1,1000,NULL);
以通过该ID推断是哪个定时器 UINT uElapse, // 时光间隔,单位为
1:计时器的名称; 1000:时光间隔,单位是毫秒; NULL:用法onTime
毫秒 TIMERPROC lpTimerFu // 回调函数 ); 例如
函数。 当不需要计时器的时候调用KillTimer(nIDEvent); 例如:
SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器 在
KillTimer(1); 1.2 调用回调函数 此办法首先写一个如下格式的
MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了
回调函数 void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT
于是SetTimer函数的原型变为: UINT SetTimer(UINT nIDEvent,UINT
第 1 页 共 3 页
nTimerid,DWORD dwTime); 然后再用SetTimer(1,100,TimerProc)函
数来建一个定时器,第三个参数就是回调函数地址。 二. 或许你会问,
假如我要加入两个或者两个以上的 r怎么办? 继续用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; } } 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 // aress of
timer procere ); 其中hWnd 是指向CWnd的指针,即处理Timer
大事的窗口类。说道窗口类(CWnd),我们有须要来看一下CWnd的继
承状况:CWnd有以下子类:CFrameWnd,CDialog,CView,CConolBar等
类。这也意味这些类中都可以定义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毫秒
第 2 页 共 3 页
系统调用一次Ontimer()。 void (CALLBACK EXPORT* lpfnTimer)(HWND,
UINT, UINT, DWORD) Specifies the address of the appliion-ppli
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()函数中编写函数,举行相应。
第 3 页 共 3 页
版权声明:本文标题:VC++中通过SetTimer函数创建并使用定时器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1716046792a483439.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论