Шаг 250 - CWnd::SetTimer

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

Возвращаемое значение
Идентификатор нового таймера, если функция успешна. Прикладная программа передает это значение к KillTimer функции, чтобы уничтожить таймер. Отличный от нуля,если успешна, иначе 0.

Параметры
nDEvent Определяет идентификатор таймера отличный от нуля.
nElapse
Определяет значение времени задержки в миллисекундах.
lpfnTimer
Определяет адрес обеспеченный прикладной программой для TimerProc функции повторного вызова, которая обрабатывает WM_TIMER сообщения. Если этот параметр NULL WM_TIMER сообщения помещены в очередь сообщений прикладной программы и обработаны объектом CWnd.

Замечания
Устанавливает таймер системы. Значение задержки времени определено и каждый раз когда подходит время система регистрирует WM_TIMER сообщение к очереди сообщений прикладной программы или вызывает обращение к функции повторного вызова. LpfnTimer функция повторного вызова не должна иметь имя TimerProc но она должно быть определена следующим образом:

void CALLBACK EXPORT TimerProc
(
	HWND hWnd,	// дескриптор CWND который вызвал SetTimer
	UINT nMsg,	// WM_TIMER
	UINT nIDEvent	// идентификатор таймера
	DWORD dwTime	// системное время
);

Таймеры - ограниченный глобальный ресурс следовательно важно, что бы прикладная программа проверяет значение возвращенное SetTimer функцией для проверки что таймер является фактически доступным.

Пример

// Этот пример показывает, как использовать CWnd:: SetTimer,
// CWnd::KillTimer, и как обработать WM_TIMER сообщения. 
// Таймер установлен чтобы послать WM_TIMER сообщение основному 
// рамочному окну каждые 2 секунды в OnStartTimer (). 
// OnStopTimer остановит таймер,  вызывая CWnd:: KillTimer. 
// OnTimer был установлен через class wizard, чтобы обработать 
/  WM_TIMER сообщения для основного рамочного окна. 
// В этом примере динамик PC подаст звуковой сигнал каждые 2 секунды.

void CMainFrame::OnStartTimer() 
{
	m_nTimer = SetTimer(1, 2000, 0);
}

void CMainFrame::OnStopTimer() 
{
	KillTimer(m_nTimer);   
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	MessageBeep(0xFFFFFFFF);	// Звук

	// Вызывать базовый обработчки
	CMDIFrameWnd::OnTimer(nIDEvent);
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 31.12.2001