Таймер служит для того, чтобы ваша программа что-то с определенным периодом делала. Например, вы хотите, чтобы раз в секунду ваша программа издавала звуковой сигнал. Или раз в полсекунды меняла заголовок окна.
Для создания таймера используется функция SetTimer, для удаления — KillTimer
. Созданный таймер будет посылать в вашу программу сообщение WM_TIMER
.
Напишем программу, которая будет раз в секунду издавать звуковой сигнал. Для чего внесем следующие изменения в функцию WinMain:
1 2 3 4 5 6 7 8 9 | ... SetTimer(hwnd, 1, 1000, NULL); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } KillTimer(hwnd, 1); ... |
Сначала мы создаем таймер функцией SetTimer
.
Параметры: первый — это HWND того окна, к которому таймер относится. У нас оно равно hwnd. Таймер всегда должен относится к определеному окну. Второй параметр — это идентификатор таймера. Мы поставили его в 1. Ели создадим еще один таймер, то для него зададим другой идентификатор (например, 2). Третий параметр определяет, как часто наш таймер будет посылать сообщение WM_TIMER. Эта величина задается в миллисекундах. Значение 1000 означает, что таймер будет посылать сообщение WM_TIMER раз в секунду. Четвертый параметр задает функцию, которая будет обрабатывать сообщение WM_TIMER. Если этот параметр установлен в NULL, то обрабатывать будет оконная процедура (вернее сообщение отправится в очередь сообщений приложения).
Обратите внимание, где мы создаем таймер — в WinMain. Это потому, что мы хотим, чтобы таймер запускался сразу с нашей программой. Но можно его заводить и в другом месте — в оконной процедуре, например.
Нам осталось добавить обработчик для WM_TIMER
в оконную процедуру. Это делаем так:
1 2 3 4 | switch (msg){ case WM_TIMER: MessageBeep(-1); break; |
Запускаем программу. Раз в секунду должен раздаваться звуковой сигнал.
Сообщение WM_TIMER
отправляется таймером и имеет следующие дополнительные параметры:
wParam — идентификатор таймера, отправившего сообщение WM_TIMER
(второй параметр функции SetTimer). Именно с помощью wParam вы можете определить, что за таймер послал сообщение (а таймеров в программе может быть несколько).
lParam — это указатель на CALLBACK-функцию, которая обработывает сообщение WM_TIMER. Такая функция будет выполняться, если при создании таймера функцикй SetTimer
ее четвертый параметр отличен от NULL — в него мы как раз и записываем указатель на эту функцию.
0 Комментарии。