Share via


CWnd::SetTimer

更新 : 2010 年 6 月

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

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

パラメーター

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

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

  • lpfnTimer
    アプリケーション提供のアドレスTimerProcを処理するコールバック関数をWM_TIMERメッセージ。 このパラメーターがNULL、WM_TIMERメッセージをアプリケーションのメッセージ キューに配置され、処理、CWndオブジェクト。

戻り値

正常終了した場合は、新しいタイマーのタイマー識別子を返します。 この値ことがありますまたはを通じて、渡された値に等しいことがあります、nIDEventパラメーター。 アプリケーションは常に戻り値を渡す必要があります、KillTimerメンバー関数、タイマーを殺すために。 正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

間隔値を指定して、間隔が経過するたびに、システムが post を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メッセージ。 送信する最初のタイマーが設定されている、WM_TIMERメッセージをメイン フレーム ウィンドウが 2 秒間隔でOnStartTimer。 OnTimerイベント ハンドラー ハンドルWM_TIMER、メイン フレーム ウィンドウのメッセージを。 このメソッドは、PC スピーカーの 2 秒ごとにビープ音が発生します。 2 番目のタイマーでは 37. 5 秒ごとのコールバック関数にメッセージが送信されます。 OnStopTimer呼び出すことによって両方のタイマを停止するCWnd::KillTimerの各タイマーの id。

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

概念

CWnd のメンバー

履歴の変更

日付

History

理由

2010 年 6 月

UINT_PTR、3 番目のパラメーターに使用するコールバック関数のシグネチャを修正しました。 例はコールバックのタイマーを追加します。

カスタマー フィードバック