CWnd::SetTimer
安裝系統計時器。
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
參數
nIDEvent
指定非零的計時器識別項。 如果計時器識別項是唯一的,則 SetTimer 會傳回同一個值。 否則 SetTimer 會決定新的唯一值並傳回該值。 針對視窗計時器 (具有 NULL 回呼函式),只有與目前視窗相關聯之其他視窗計時器的值必須是唯一的。 對於回呼計時器,所有處理序中所有計時器的此值都必須是唯一的。 因此,當您建立回呼計時器時,傳回值可能與您指定的值不同。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 訊息。 第一個計時器已設定,每隔 2 秒在 OnStartTimer 中傳送 WM_TIMER 訊息到主框架視窗。 OnTimer 事件處理常式會處理主框架視窗的 WM_TIMER 訊息。 這個方法會使電腦喇叭每 2 秒發出嗶聲一次。 第二個計時器每隔 3.75 秒將訊息傳送至回呼函式。 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