Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab4.doc
Скачиваний:
0
Добавлен:
12.11.2019
Размер:
96.77 Кб
Скачать

3. Работа с таймером

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

Порядок работы с таймером

  1. Установить таймер(ы) с помощью функции SetTimer.

  2. Добавить обработчик сообщений от таймера - WM_TIMER в функцию окна.

  3. Удалить таймер, когда он больше не требуется, с помощью функции KillTimer.

Функция SetTimer создает таймер с определенным значением таймаута.

UINT SetTimer(

HWND hWnd, // дескриптор окна для сообщений от таймера

UINT nIDEvent, // идентификатор таймера

UINT uElapse, // значение таймаута

TIMERPROC lpTimerFunc // адрес процедуры обработка сообщений от таймера

);

hWnd - определяет окно, ассоциированное с таймером, если NULL ни одно окно не ассоциируется с таймером и значение nIDEvent игнорируется.

nIDEvent - не равный нулю идентификатор таймера

uElapse - определяет значение таймаута в миллисекундах

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

Возвращает идентификатор таймера в случае успешного завершения и ноль в обратном случае.

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

WM_TIMER

wTimerID = wParam; // идентификатор таймера

tmprc = (TIMERPROC *) lParam; // адрес функции таймера

wTimerID - значение wParam, определяет идентификатор таймера

tmprc - значение lParam, указывает на функцию обратного вызова, переданную в качестве параметра в функцию SetTimer при установки таймера.

Возвращает ноль, если сообщение обработано.

Функция KillTimer удаляет указанный таймер.

BOOL KillTimer(

HWND hWnd, //дескриптор окна, где установлен таймер

UINT uIDEvent // идентификатор таймера

);

hWnd - определяет окно, ассоциированное с таймером

uIDEvent - определяет таймер, который должен быть удален, если таймер создавался функцией SetTimer с hWnd=NULL, этот параметр должен быть равен значению, возвращенному функцией SetTimer.

В случае успешного завершения возвращает ненулевой результат.

В приложении приведена демонстрационная программа, в которой по сообщению от таймера генерируется случайное число и суммируется с числом, которое находится в редакторе (поле ввода), результат помещается в редактор. Кнопка "Reset" обнуляет значение в редакторе. Генерация случайных чисел начинается по пункту меню "Start" и прекращается по пункту меню "Stop".

4. Порядок выполнения работы

  1. Создать пустой проект на VC 6.0. – Win32 Application. Подключить к проекту файлы из приложения (меню Project - Add to Project – Files…).

  2. Откомпилировать, линковать и запустить программу. Проанализировать работу программу, разобраться во внутренних механизмах. Увеличить задержку таймера до одной секунды.

  3. Добавить еще один редактор и кнопку с названием “Reset 2” в окно.

  4. Добавить еще один таймер, обработчик которого каждые две секунды будет выдавать сообщение “Timer N ” в новый редактор вместо N должно выдаваться конкретное число из первого редактора.

  5. Добавить в меню пункт – “Exit” – выход из программы. Также добавить пункты для старта и остановки второго таймера.

Повышенная сложность:

Сделать игру – “Убегающая кнопка”. При каждом тике таймера кнопка появляется в разных местах окна. При нажатии на кнопку увеличивается счет во втором редакторе. Задержка таймера задается в первом редакторе в левом верхнем углу окна. Второй таймер определяет продолжительность игры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]