progs.biz  
Начало>WinAPI>API>Урок 6
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

М. Фленов. Программирование на C++ глазами хакера
М. Фленов. Программирование на C++ глазами хакера
Заказать на Озоне



Яндекс-цитирования

Windows API
Урок 6. Работаем с таймером

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

Для создания таймера используется функция SetTimer, для удаления - KillTimer. Созданный таймер будет посылать в вашу программу сообщение WM_TIMER.

Напишем программу, которая будет раз в секунду издавать звуковой сигнал. Для сего внесем следующие изменения в функцию WinMain:

    ...
    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 в оконную процедуру. Это делаем так:

    switch (msg){
    case WM_TIMER:
        MessageBeep(-1);
        break;
        

Запускаем программу. Раз в секунду должен раздаваться звуковой сигнал.

Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев