CWnd::SetTimer
安装一个系统计时器。
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
参数
nIDEvent
指定一个非零计时器标识符。 如果计时器标识符是唯一的,此相同值由 SetTimer返回。 否则,SetTimer 确定一个新的唯一值并返回它。 传递给具有NULL回调函数)的windows计时器(,该值必须是唯一的为与当前窗口中的其他windows计时器。 为回调计时器,该值必须是唯一的。所有的所有计时器处理。 因此,那么,当您创建回调计时器时,可能更大的返回值将可能与您指定的值不同。nElapse
以毫秒为单位指定超时值或间隔。lpfnTimer
指定处理 WM_TIMER 消息由应用程序提供的 TimerProc 回调函数的地址。 如果此参数是 NULL,WM_TIMER 消息在应用程序的消息队列放置并按 CWnd 对象的过程。
返回值
新计时器的计时器标识符,如果函数运行成功。 此值可能存在也可能不与该值通过 nIDEvent 参数。 应用程序应始终通过将值返回给 KillTimer 成员函数杀害计时器。 非零,如果成功;否则,0。
备注
间隔值,指定,因此,在该间隔结束时,系统将 WM_TIMER 消息对于安装的应用程序安装的消息队列或传递消息至一个应用程序定义的 TimerProc 回调函数。
lpfnTimer 回调函数不需要名为 TimerProc,但是,必须声明为static和如下定义。
void CALLBACK TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time
);
示例
此示例使用 CWnd::SetTimer、 CWnd::OnTimer和 CWnd::KillTimer 处理 WM_TIMER 消息。 第一个计时器设置为 WM_TIMER 消息发送到主框架窗口在 OnStartTimer的每2秒。 主框架窗口的 OnTimer 事件处理程序处理 WM_TIMER 消息。 此方法使某用户嘀嘀叫每2秒。 第二个计时器发送消息给回调函数每37.5秒。 OnStopTimer 将通过调用每个计时器ID.的 CWnd::KillTimer 停止两个计时器
void CMainFrame::OnStartTimer()
{
// This timer uses a WM_TIMER message, not a callback.
// Therefore, the timer is specific to this window.
// m_nWindowTimer is a UINT_PTR field.
m_nWindowTimer = SetTimer(1, 2000, NULL);
// For this demo, we specify an interval that won't overlap
// with the window timer.
m_nCallbackTimer = SetTimer(2, 3750, &CMainFrame::MyTimerProc);
// See whether we got the ID we requested in the first parameter.
#ifdef _DEBUG
CString str;
str.Format(_T("m_ncallbackTImer ID = %d"), m_nCallbackTimer);
TRACE(str);
#endif
}
void CALLBACK CMainFrame::MyTimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time
)
{
MessageBeep(0x00000030L); // Windows question sound.
}
void CMainFrame::OnStopTimer()
{
KillTimer(m_nWindowTimer);
KillTimer(m_nCallbackTimer);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
MessageBeep(0xFFFFFFFF); // Beep
// Call base class handler.
CMDIFrameWnd::OnTimer(nIDEvent);
}
要求
标头:afxwin.h