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 のアプリケーションに用意されたコールバック関数のアドレスを指定します。このパラメーターがの場合、NULLWM_TIMER のメッセージは、アプリケーションのメッセージ キューに配置され、CWnd のオブジェクトによって処理されます。

戻り値

関数が成功した場合は、新しいタイマーのタイマーの識別子。この値は nIDEvent のパラメーターで渡される値と異なる場合もありますが存在しない可能性があります。アプリケーションは KillTimer のメンバー関数にタイマーを殺すするには、必ず戻り値を渡す必要があります。成功した場合は; それ以外の場合は 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::SetTimerWM_TIMER のメッセージを処理するために CWnd::OnTimerCWnd::KillTimer を使用します。最初のタイマーはメイン フレーム ウィンドウに WM_TIMER のメッセージに OnStartTimerの 2 秒ごとに送信するように設定されます。OnTimer のイベント ハンドラーがメイン フレーム ウィンドウの WM_TIMER メッセージを処理します。このメソッドにより PC スピーカーは 2 秒ごとにビープします。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