Главная arrow Программирование arrow PC arrow Visual Studio C++: как добавить события таймера к MFC dialog-based программе Monday, March 20 2023  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Visual Studio C++: как добавить события таймера к MFC dialog-based программе Версия для печати
Написал microsin   
11.06.2009

См. help по MFC Library Reference, CWnd::SetTimer, а также "Таймеры в приложениях MFC" http://www.cyberguru.ru/cpp-sources/classes-mfc/tajmery-v-prilozheniyakh-mfc.html.

Процесс по шагам:

1. View -> Class View, выбираем класс диалога (например, CmyDlg).

2. Правой кнопой жмем на классе, выбираем Add -> Add Function..., Return type выбираем void, в Parameter type все стираем, в Function name впечатываем StartTimer, жмем Finish.

3. Таким же образом добавляем к классу функцию void CmyDlg::StopTimer(). Кстати, эту функцию можно не добавлять, если остановка таймера не нужна (например, запускаем таймер при старте приложения, и таймер работает всегда, пока приложение не закроют).

4. Добавляем глобальную переменную UINT_PTR m_nTimer в модуль класса CmyDlg (в начало файла myDlg.cpp). Эта переменная может понадобиться, если нам надо остановить таймер с помощью функции KillTimer.

5. Добавляем обработчик сообщения WM_TIMER к классу CmyDlg. Для этого в Class View выбираем класс CmyDlg, выбираем в меню View -> Properties Window (F4), жмем кнопку Messages, ищем в списке событие WM_TIMER, привязываем к нему обработчик OnTimer.

6. Теперь добавляем код для всех функций.
void CmyDlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 MessageBeep(0xFFFFFFFF);   // Beep
 CDialog::OnTimer(nIDEvent);
}

void CmyDlg::StartTimer(void)
{
    //Таймер будет срабатывать каждые 2 секунды.
    //Так как третий параметр равен NULL, то при срабатывании таймера
    // будет посылаться сообщение WM_TIMER окну приложения.
    m_nTimer = SetTimer(1, 2000, 0);
}

void CmyDlg::StopTimer(void)
{
   KillTimer(m_nTimer);
}

7. Запускаем таймер при старте приложения. Для этого в код BOOL CmyDlg::OnInitDialog() добавляем строчку:
// TODO: Add extra initialization here
StartTimer();

 

Комментарии  

  1. #1 Слава
    2010-02-1523:46:25 А зачем собственно глобальную переменную вводить, если StopTimer и StartTimer принадлежат классу CMyDlg? Я бы приватную переменную вкатил, или вообще число - идент таймера.

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2023