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

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

Для создания таймера используется функция 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 — в него мы как раз и записываем указатель на эту функцию.

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>