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