- •Министерство образования и науки Российской Федерации
- •1. Добавление меню
- •2. Добавление кнопок и редакторов
- •2.1. Создание кнопок и редакторов и обработка их сообщений
- •2.2. Помещение и получение текста из редактора (поля ввода)
- •3. Работа с таймером
- •4. Порядок выполнения работы
- •5.Контрольные вопросы
- •Приложение Файл rctm.Cpp
- •Файл rctm.Rc
- •Файл resource.H
3. Работа с таймером
Таймеры необходимы, когда требуется выполнять какие-то действия через определенные промежутки времени.
Порядок работы с таймером
Установить таймер(ы) с помощью функции SetTimer.
Добавить обработчик сообщений от таймера - WM_TIMER в функцию окна.
Удалить таймер, когда он больше не требуется, с помощью функции 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. Порядок выполнения работы
Создать пустой проект на VC 6.0. – Win32 Application. Подключить к проекту файлы из приложения (меню Project - Add to Project – Files…).
Откомпилировать, линковать и запустить программу. Проанализировать работу программу, разобраться во внутренних механизмах. Увеличить задержку таймера до одной секунды.
Добавить еще один редактор и кнопку с названием “Reset 2” в окно.
Добавить еще один таймер, обработчик которого каждые две секунды будет выдавать сообщение “Timer N ” в новый редактор вместо N должно выдаваться конкретное число из первого редактора.
Добавить в меню пункт – “Exit” – выход из программы. Также добавить пункты для старта и остановки второго таймера.
Повышенная сложность:
Сделать игру – “Убегающая кнопка”. При каждом тике таймера кнопка появляется в разных местах окна. При нажатии на кнопку увеличивается счет во втором редакторе. Задержка таймера задается в первом редакторе в левом верхнем углу окна. Второй таймер определяет продолжительность игры.