2024年6月12日发(作者:)
MFC定时器SetTimer函数用法总结
CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用,而API函数
SetTimer则没有这个限制,这是一个很重要的区别。
1、启动定时器。
启动定时器就需要使用CWnd类的成员函数SetTimer。CWnd::SetTimer的原型
如下:
参数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
工程的类向导,选择要添加定时器的类,在消息列表中找到WM_TIMER消息,添加消息
处理函数。添加后,cpp文件中会出现类似如下内容:
C++代码
BEGIN_MESSAGE_MAP(CExample44Dlg, CDialogEx)
......
ON_WM_TIMER()
END_MESSAGE_MAP()
void CExample44Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDialogEx::OnTimer(nIDEvent);
}
之后就可以在OnTimer函数中进行相应的处理了。OnTimer的参数nIDEvent为
定时器ID,即在SetTimer成员函数中指定的定时器ID,如果有多个定时器,我们可以像
下面这样处理:
C++代码
void CExample44Dlg::OnTimer(UINT_PTR nIDEvent)
{ // TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
case 1:
//在这添加执行定时器1的任务;
发布评论