共用方式為


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::SetTimerCWnd::OnTimerCWnd::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

請參閱

參考

CWnd 類別

階層架構圖表

WM_TIMER

CWnd::KillTimer

SetTimer