vs2010中 MFC中不同类中关于settimer定时器的调用

vs2010中 MFC中不同类中关于settimer定时器的调用,第1张

你这个貌似是视图类,可在视图初始化之后进行设置定时器,如voidCfightView::OnInitialUpdate(){CView::OnInitialUpdate()SetTimer(12,333,NULL)}OnTimer函数示例:if(12==nIDEvent){nMovex+=2//定义为类成员变量,初始化为0,具体加减多少自定nMovey+=2//同上Invalidate()//刷新视图,必需的,否则不会移动}Ondraw函数变化:BitBlt(pDC->m_hDC,500+nMovex,110+nMovey,..)

定时器,可以帮助开发者或者用户定时完成某项任务。在使用定时器时,我们可以给系统传入一个时间间隔数据,然后系统就会在每个此时间间隔后触发定时处理程序,实现周期性的自动 *** 作。例如,我们可以在数据采集系统中,为定时器设置定时采集时间间隔为1个小时,那么每隔1个小时系统就会采集一次数据,这样就可以在无人 *** 作的情况下准确的进行 *** 作。

MFC定时器

VS2010编程中,我们可以使用MFC的CWnd类提供的成员函数SetTimer实现定时器功能,也可以使用Windows API函数SetTimer来实现。两者使用方法实际上很类似,但也有不同。

CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用,而API函数SetTimer则没有这个限制,这是一个很重要的区别。因为本教程主要是讲解MFC编程,所以这里就先重点讲解MFC定时器的用法,关于API函数SetTimer的用法鸡啄米会在MFC定时器讲解的基础上进行延伸。

启动定时器就需要使用CWnd类的成员函数SetTimer。CWnd::SetTimer的原型如下:

UINT_PTR SetTimer(

UINT_PTR nIDEvent,

UINT nElapse,

void (CALLBACK* lpfnTimer

)(HWND,

UINT,

UINT_PTR,

DWORD

)

)

参数nIDEvent指定一个非零的定时器ID;参数nElapse指定间隔时间,单位为毫秒;参数lpfnTimer指定一个回调函数的地址,如果该参数为NULL,则WM_TIMER消息被发送到应用程序的消息队列,并被CWnd对象处理。如果此函数成功则返回一个新的定时器的ID,我们可以使用此ID通过KillTimer成员函数来销毁该定时器,如果函数失败则返回0。

通过SetTimer成员函数我们可以看出,处理定时事件可以有两种方式,一种是通过WM_TIMER消息的消息响应函数,一种是通过回调函数。

如果要启动多个定时器就多次调用SetTimer成员函数。另外,在不同的CWnd中可以有ID相同的定时器,并不冲突。

2、为WM_TIMER消息添加消息处理函数,或者定义回调函数。

如果调用CWnd::SetTimer函数时最后一个参数为NULL,则通过WM_TIMER的消息处理函数来处理定时事件。添加WM_TIMER消息的处理函数的方法是,在VS2010工程的Class View类视图中找到要添加定时器的类,点击右键,选择Properties,显示其属性页,然后在属性页工具栏上点击Messages按钮,下面列表就列出了所有消息,找到WM_TIMER消息,添加消息处理函数。

如果是win32的窗口程序的话

SetTimer(101,1000,NULL)

加入消息处理

...

WM_TIMER

...

如果是MFC的话 使用类向导添加 WM_TIMER消息,然后编辑处理代码:

如果是控制台的话

参考以下代码段

#include<iostream>

#include<time.h>

#define CLOCK_PER_SEC 1000.0 //程序运行的时间单位,在VC中是这样定义的

using namespace std

int main()

{

clock_t start

float m

start=clock() //获取从程序开始到调用此语句所运行的时间

cout<<"请输入要等待的时间"<<endl

cin>>m

m*=CLOCK_PER_SEC//将秒转换为程序运行时间单位

while(clock()-start<m)

cout<<"共等待了"<<m/CLOCK_PER_SEC<<"秒"<<endl

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7896066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存