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


CWnd::SetTimer

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

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

Параметры

  • nIDEvent
    Определяет ненулевой идентификатор таймера.Если идентификатор таймера unique, то это одно и то же значение возвращается SetTimer.В противном случае - значение SetTimer указывает новое уникальное значение и будет возвращать то.Таймера окна (который имеет НУЛЕВУЮ функцию обратного вызова), значение должно быть уникальным только для других таймеров окнам, которые сопоставлены с текущим окном.Таймера обратного вызова, значение должно быть уникальным для всех таймеров во всех процессах.Поэтому при создании таймера обратного вызова, тем скорее всего, возвращаемое значение может отличаться от значения.

  • 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 секунды.Второй таймер отправляет сообщение на функцию обратного вызова каждые 37,5 секунд.OnStopTimer останавливает оба timer путем вызова 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