Share via


CWnd::SetTimer

安裝系統計時器。

UINT_PTR SetTimer(
   UINT_PTR nIDEvent,
   UINT nElapse,
   void (CALLBACK* lpfnTimer
)(HWND,
   UINT,
   UINT_PTR,
   DWORD
) 
);

參數

  • nIDEvent
    指定非零的計時器識別項。 如果計時器識別項是唯一的,則這個相同的值。 SetTimer傳回。 否則, SetTimer 決定新的唯一值並傳回該。 對於具有 null 回呼函式 (Callback Function) 的 Windows 計時器 (,值必須是唯一的為與目前視窗的其他 Windows 計時器。 對於回呼計時器,值必須是唯一的名稱在所有處理序中的所有計時器。 因此,當您建立回呼,計時器時,更能將傳回的值可能與您指定的值不同。

  • nElapse
    指定以毫秒為單位的逾時值或間隔。

  • lpfnTimer
    指定處理 WM_TIMER 訊息為應用程式提供的 TimerProc 回呼函式的位址。 如果此參數為, NULLWM_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 訊息。 第一個計時器已設定 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

請參閱

參考

CWnd 類別

階層架構圖

WM_TIMER

CWnd::KillTimer

SetTimer