VC++中通过SetTimer函数创建并使用定时器_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vc+中通过settimer函数创建并使用定时器settimer函数可以用来创建或设置一个定时器,该函数创建的定时器与timer控件(定时器控件)效果相同。 当你想每隔一段时光执行一件事的的时候,你可以用法它。 用法定时器的办法比较容易,通常告知windows一个时光间隔,然后windows以此时光间隔周期性触发程序。通常有两种办法来实现:发送wm_timer消息和调用应用程序定义的回调函数。 settimer函数的使用 1.1 用wm_timer来设置定时器 先请看settimer这个api函数的原型 uint_ptr settimer( hwnd hwnd, / 窗口句柄 uint_ptr

2、 nidevent, / 定时器id,多个定时器时,可以通过该id推断是哪个定时器 uint uelapse, / 时光间隔,单位为毫秒 timerproc lptimerfu / 回调函数 ); 例如 settimer(m_hwnd,1,1000,null); /一个1秒触发一次的定时器 在mfc程序中settimer被封装在cwnd类中,调用就不用指定窗口句柄了 于是settimer函数的原型变为: uint settimer(uint nidevent,uint nelapse,vo(callback export *lpfntimer)(hwnd,uint ,yint ,dword)

3、当用法settimer函数的时候,就会生成一个计时器。函数中nidevent指的是计时器的标识,也就是名字。nelapse指的是时光间隔,也就是每隔多长时光触发一次大事。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为null,也就是用法系统默认的回调函数,系统默认认的是ontime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成ontime函数:在classwizard里,挑选需要计时器的类,添加wm_time消息映射,就自动生成ontime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时光就会自动执行一次。 例: settimer(1,10

4、00,null); 1:计时器的名称; 1000:时光间隔,单位是毫秒; null:用法ontime函数。 当不需要计时器的时候调用killtimer(nidevent); 例如:killtimer(1); 1.2 调用回调函数 此办法首先写一个如下格式的回调函数 void callback timerproc(hwnd hwnd,uint nmsg,uint ntimerid,dword dwtime); 然后再用settimer(1,100,timerproc)函数来建一个定时器,第三个参数就是回调函数地址。 二. 或许你会问,假如我要加入两个或者两个以上的 r怎么办? 继续用settim

5、er函数吧,上次的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()

6、函数。 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 );

7、 其中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, uin

8、t, dword) ); 参数含义: nidevent:是指设置这个定时器的id,即身份标记,这样在ontimer()大事中,才干按照不同的定时器,来做不同的大事响应。这个id是一个无符号的整型。 nelapse 是指时光延迟。单位是毫秒。这意味着,每隔nelapse毫秒系统调用一次ontimer()。 void (callback export* lpfntimer)(hwnd, uint, uint, dword) specifies the address of the appliion-ppli timerproc callback function that processes th

9、e 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大事。 所以,普通状况下,我们将这个值设为n

10、ull,有设置该定时器的对象中的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大事。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论