Share via


CWnd::SetTimer

システム タイマーをインストールします。

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

パラメーター

  • nIDEvent
    0 以外のタイマーの識別子を指定します。 タイマーの識別子が一意の場合、この同じ値が SetTimer によって返されます。 一意でない場合、SetTimer は、新しい一意の値を指定して返します。 ウィンドウ タイマー (NULL コールバック関数を持つ) の場合、値は現在のウィンドウに関連付けられている他のウィンドウ タイマーについてのみ一意である必要があります。 コールバックのタイマーの場合、値はすべてのプロセスのすべてのタイマーで一意である必要があります。 したがって、コールバック タイマーを作成すると、戻り値が指定した値と異なる可能性が高くなります。

  • nElapse
    タイムアウト値 (間隔) をミリ秒単位で指定します。

  • lpfnTimer
    WM_TIMER メッセージを処理するためにアプリケーションが提供する TimerProc コールバック関数のアドレスを指定します。 このパラメーターが NULL の場合、WM_TIMER メッセージはアプリケーションのメッセージ キューに登録され、CWnd オブジェクトによって処理されます。

戻り値

関数が正常に完了した場合の、新しいタイマーのタイマー識別子。 この値は nIDEvent パラメーター経由で渡された値と一致する場合も異なる場合もあります。 アプリケーションがタイマーを終了するには、必ず KillTimer メンバー関数に戻り値を渡す必要があります。 正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

間隔の値を指定すると、システムは間隔が経過するたびに、インストール アプリケーションのインストール メッセージ キューに WM_TIMER メッセージをポストするか、アプリケーション定義された TimerProc コールバック関数にメッセージを渡します。

lpfnTimer コールバック関数は TimerProc という名前である必要はありませんが、静的として宣言し、次のように定義する必要があります。

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::OnTimer、および CWnd::KillTimer を使用して、WM_TIMER メッセージを処理しています。 最初のタイマーは、OnStartTimer で 2 秒ごとにメイン フレーム ウィンドウに WM_TIMER メッセージを送信するように設定されます。 OnTimer イベント ハンドラーは、メイン フレーム ウィンドウ用に WM_TIMER メッセージを処理します。 このメソッドにより、PC スピーカーは 2 秒ごとにビープ音を鳴らします。 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);
}

必要条件

Header: afxwin.h

参照

関連項目

CWnd クラス

階層図

WM_TIMER

CWnd::KillTimer

SetTimer