mfc settime和ontimer怎么工作的
MFC中的SetTimer和OnTimer函数是用来实现定时器功能的。
-
SetTimer函数:
- SetTimer是CWnd类的成员函数,用于设置一个定时器。
- 它的原型是
UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse, TIMERPROC lpTimerFunc = NULL)。 - 参数nIDEvent是定时器的ID,用于唯一标识一个定时器。
- 参数nElapse是定时器的时间间隔,单位为毫秒。
- 参数lpTimerFunc是一个函数指针,用于指定定时器到期时的回调函数。如果不指定回调函数,则定时器到期时会发送WM_TIMER消息给窗口对象。
- SetTimer函数返回一个定时器的唯一标识,可以通过这个标识来取消定时器。
-
OnTimer函数:
- OnTimer是一个消息处理函数,用于接收并处理定时器到期的消息。
- 它的原型是
afx_msg void OnTimer(UINT_PTR nIDEvent)。 - 当定时器到期时,MFC会调用对应窗口对象的OnTimer函数,并传递定时器的ID作为参数。
- 在OnTimer函数中可以根据定时器的ID来执行相应的操作。
使用SetTimer和OnTimer函数的一般步骤如下:
- 在窗口类中的消息映射表中添加对WM_TIMER消息的映射,将其关联到OnTimer函数。
- 在需要启动定时器的地方调用SetTimer函数,设置定时器的ID和时间间隔。
- 在OnTimer函数中根据定时器的ID执行相应的操作,比如更新界面、执行某个任务等。
- 在程序退出或不再需要定时器时,调用KillTimer函数取消定时器。
下面是一个简单的示例代码,演示了如何使用SetTimer和OnTimer函数实现一个每秒更新界面的定时器:
// 在消息映射表中添加对WM_TIMER消息的映射
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
ON_WM_TIMER()
END_MESSAGE_MAP()
// 启动定时器
void CMyWnd::StartTimer()
{
// 设置定时器,ID为1,间隔为1000毫秒(1秒)
SetTimer(1, 1000, NULL);
}
// 定时器到期时调用的函数
void CMyWnd::OnTimer(UINT_PTR nIDEvent)
{
// 判断定时器的ID
if (nIDEvent == 1)
{
// 更新界面
// ...
}
// 调用基类的函数,以处理默认行为
CWnd::OnTimer(nIDEvent);
}
// 取消定时器
void CMyWnd::StopTimer()
{
KillTimer(1);
}
这样,每隔1秒钟,定时器到期时就会调用OnTimer函数来更新界面。
原文地址: https://www.cveoy.top/t/topic/i9mc 著作权归作者所有。请勿转载和采集!