MFC SetTimer 和 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/kQrv 著作权归作者所有。请勿转载和采集!