Visual C++编程之实用篇.docVIP

  1. 1、本文档共110页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Visual C++编程之实用篇.doc

Visual C++编程VC编程之定时器在编程时,会经常使用到定时器。使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。Visual C++中提供了很多关于时间操作的函数,利用它们控制程序能够精确地完成定时和计时操作。Visaul C++中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔(退出程序时别忘了调用和SetTimer()配对使用的KillTimer()函数),如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数OnTimer()自己写的类如何添加OnTimer响应函数?进入Class ? Wizard,在Message ? Maps中,选中你的类,右边的Messages选择WM_TIMER,按增加函数按钮即可。,并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常简单,但其定时功能如同Sleep()函数的延时功能一样,精度非常低,只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。 1.1 用WM_TIMER来设置定时器 先请看SetTimer这个API函数的原型 UINT_PTR SetTimer( ? HWND hWnd,????????????? // 窗口句柄 ? UINT_PTR nIDEvent,????? // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 ? UINT uElapse,?????????? // 时间间隔,单位为毫秒 ? TIMERPROC lpTimerFunc?? // 回调函数 ); 例如 SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器 在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,例如: UINT SetTimer(1,100,NULL); 函数反回值就是第一个参数值1,表示此定时器的ID号。 第二个参数表示要等待100毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。 注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。 1.2 调用回调函数 此方法首先写一个如下格式的回调函数 void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime); 然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。 二、多个定时器的实现与应用 我们在安装定时器时都为其指定了ID,使用多个定时器时,该ID就发挥作用了。 不使用MFC时,当接收到WM_TIMER消息,WPARAM wParam中的值便是该定时器的ID 使用MFC时就更简单了,我们为其增加WM_TIME的消息处理函数OnTimer即可,请看如下例子 void CTimerTestDlg::OnTimer(UINT nIDEvent) { ?switch (nIDEvent) ?{ ?case 24:? ///处理ID为24的定时器 ??Draw1(); ??break; ?case 25:? ///处理ID为25的定时器 ??Draw2(); ??break; ?} ?CDialog::OnTimer(nIDEvent); } 当你用回调函数时,我们可以根据nTimerid的值来判断是哪个定时器,例如: void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime) { ?? switch(nTimerid) ?? { ?? case 1:? ///处理ID为1的定时器 ???????? Do1(); ???????? break; ?? case 2:? ///处理ID为2的定时器 ???????? Do2(); ???????? break; ?? } } 三、取消定时器 不再使用定时器后,我们应该调用KillTimer来取消定时,KillTimer的原型如下 BOOL KillTimer( ? HWND hWnd,????????? // 窗口句柄 ? UINT_PTR uIDEvent?? // ID ); 在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器。 Windows时间函数大全 ?????? 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器

文档评论(0)

seym + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档