C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 7. Работа с таймером / Уроки MFC / Visual C++

Visual C++. MFC
Урок 7. Работа с таймером

Продолжим развитие нашей программы.

Прежде всего обсудим, что делает таймер. После установки таймер начинает "тикать". Это означает, что ваша программа получает через определённый промежуток времени сообщение WM_TIMER. В обработчике этого сообщения можно написать любой код. Важно, что код обработчика будет выполняться через определённые промежутки времени.

Сейчас мы с вами посмотрим, как можно в нашей программе запустить таймер. Прежде всего мы должны его создать. Для этого конструктор нашего класса CMyMainWnd добавите следующий код:

CMyMainWnd(){
    Create(NULL,"My title");
    SetTimer(1, 1000, NULL);
}

Функция SetTimer имеет несколько параметров. Первый (у нас он равен 1) - это идентификатор таймера. Второй (1000 в нашем случае) - это через сколько миллисекунд таймер тикает. 1000 означает что раз в секунду, 500 - что два раза в секунду. Третий параметр ставим в NULL. Это означает, что мы будем обрабатывать сообщение WM_TIMER для нашего таймера в функции OnTimer нашего оконного класса. Но в принципе третий параметр - это адрес функции-обработчика.

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

Добавляем метод в класс:

    ...
    afx_msg void OnPaint();
    afx_msg void OnTimer(UINT);
    DECLARE_MESSAGE_MAP()

Пишем реализацию данного метода:

void CMyMainWnd::OnTimer(UINT){
    MessageBeep(-1);
}

Здесь мы методом

MessageBeep(-1);

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

И, наконец, третий шаг - добавление макроса:

...
ON_WM_PAINT()
ON_WM_TIMER()
END_MESSAGE_MAP()

Запускаем программу и прислушиваемся. Каждую секунду должен издаваться звук beep. Но, несмотря на то, что программа работает, надо ещё в конце программы таймер убить. Для этого вносим класс код для деструктора:

~CMyMainWnd(){
    KillTimer(1);
}

У метода KillTimer один параметр - это идентификатор таймера. Ставим тут 1 (ведь наш таймер имеет именно такой идентификатор).