Лекция 14
Таймер_ 1
Создание таймера 1
Остановка таймера 1
Пример использования таймера 2
Тестирование работы таймера 3
Для создания системного таймера оконный класс может использовать функцию-член SetTimer ( ) класса CWnd со следующим прототипом:
UINT SetTimer ( UINT nIDEvent , UINT nElapse ,
void ( CALLBACK EXPORT* lpfnTimer ) (HWND , UINT , UINT , DWORD )) ;
Эта функция возвращает идентификатор таймера, если она выполнена успешно, и ноль противном случае. Параметры:
nIDEvent идентификатор таймера;
nElapse задает время срабатывания таймера в миллисекундах;
lpfnTimer указатель на callback-функцию, которая обрабатывает сообщения WM_TIMER. Если этот параметр равен NULL, сообщения WM_TIMER помещаются в очередь сообщений приложения и обрабатываются оконным объектом.
По истечении времени в nElapse миллисекунд после установки таймера или предыдущего его срабатывания система посылает сообщение WM_TIMER в очередь приложения или передает его для обработки функции, на которую указывает параметр IpfnTimer. Прототип функции, на которую ссылается этот указатель, должен быть следующим:
void CALLBACK EXPORT
TimerProc ( HWND hWnd , UINT nMsg , UINT nIDEvent , DWORD dwTime ) ;
Здесь
hWnd дескриптор оконного объекта, который вызвал функцию SetTimer ( ),
nMsg идентификатор сообщения WM_TIMER,
nIDEvent идентификатор таймера;
dwTime системное время.
Имя этой функции не обязательно должно быть TimerProc, однако она должна возвращать 0.
Остановить установленный таймер можно с помощью функции-члена того же класса KillTimer ( ) со следующим прототипом:
BOOL KillTimer ( int nIDEvent ) ;
В качестве параметра nIDEvent этой функции передается идентификатор таймера. Функция возвращает TRUE, если таймер остановлен, и FALSE – если нет.
При размещении указанных функций в программе следует иметь в виду, что эти функции в конечном итоге вызывают функции Windows, каким передается в качестве параметра дескриптор окна, с которым связывается таймер. Это означает, что установка таймера не может быть произведена раньше, чем будет создано окно. Наиболее ранней в смысле выполнения программы точкой для установки таймера является обработчик события OnNcCreate ( ). Уничтожение таймера также должно производиться, когда окно еще существует. Последней возможностью для вас в этом смысле является обработчик события OnNcDestroy ( ) (но до вызова обработчика базового класса). Мы рекомендуем вам всегда делать это несколько раньше – в обработчике события OnClose ( ) или OnDestroy ( ).
Обработчик событий таймера называется OnTimer ( ) и имеет прототип:
afx_msg void OnTimer (UINT nIDEvent ) ;
Его единственный параметр nIDEvent задает идентификатор таймера. Эта функция вызывается операционной системой, чтобы позволить вашему приложению обработать сообщение Windows WM_TIMER. Параметр, передаваемый функции, отражает значение. которое он имел в момент получения его функцией окна приложения. Если вы вызовете в этом обработчике обработчик базового класса, этот последний будет использовать значение параметра, которое он имел в момент посылки сообщения WM_TIMER, а не значение, переданное вами.
Рассмотрим пример, который не только демонстрирует основные приёмы использования с таймера, но и позволяет тестировать его работу. Диалоговое окно IDD_TIMER_DIALOG содержит три таймера. Первый и второй таймер создаются после щелчка на кнопке “Включить”. Время срабатывания каждого таймера пользователь может установить в соответствующих текстовых полях. Каждый таймер увеличивает значение соответствующего счётчика, которые также отображаются в текстовых полях. Второй таймер срабатывает реже, но увеличивает значение своего счётчика на большее значение. В среднем значения обоих счётчиков должны быть равны. Оба таймера останавливаются при щелчке на кнопке “Выключить”.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.