Поделиться через


CWnd::SetTimer

Устанавливает системный таймер.

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

Параметры

  • nIDEvent
    Задает ненулевой идентификатор времени. Если идентификатор таймера уникален, это же значение возвращается методом SetTimer. В противном случае — значение SetTimer определяет новое уникальное значение и возвращает его. Для таймера окна (который имеет функцию обратного вызова NULL ) значение должно быть уникальным только среди других таймеров окон, связанных с текущим окном. Для таймера обратного вызова значение должно быть уникальным для всех таймеров во всех процессах. Поэтому при создании таймера обратного вызова более вероятно, что возвращаемое значение может отличаться от значений указанного.

  • nElapse
    Задает значение тайм-аута или интервала в миллисекундах.

  • lpfnTimer
    Определяет адрес предоставленной приложением функции обратного вызова TimerProc, которая обрабатывает сообщения WM_TIMER. Если этот параметр имеет значение NULL, сообщения WM_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::SetTimer, CWnd::OnTimer и CWnd::KillTimer для обработки сообщений WM_TIMER. Первый таймер настроен отправлять сообщение WM_TIMER в главное окно фреймовому каждые 2 секунд в OnStartTimer. Обработчик событий OnTimer обрабатывает сообщения WM_TIMER для основного фреймового окна. Этот метод вызывает динамику ПК в звуковом сигнале каждые 2 секунды. Второй таймер отправляет сообщение в функции обратного вызова каждой 3.75 секунд. OnStopTimer. останавливает оба таймера посредством вызова метода 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