Программирование PC Visual Studio C++: как добавить события таймера к MFC dialog-based программе Fri, March 29 2024  

Поделиться

Нашли опечатку?

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

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

См. 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();
 

Комментарии  

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

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


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

Top of Page