Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



VS60, MFC, Таймер и ProgressBar

Сообщений 1 страница 2 из 2

1

Поиграемся в таймер и progress bar:
1. Создадим MFC проект:
https://i.ibb.co/QMsSzv3/VS60-MFC-PBTMDEMO-01-15-58-23-07-2021-min.jpg

2. Выберем  Dialog Based, язык English:
https://i.ibb.co/B21sHGJ/VS60-MFC-PBTMDEMO-02-15-59-23-07-2021-min.jpg

3. Отключим всё кроме 3D Controls, заголовок пусть будет ProgressBar Demo:
https://i.ibb.co/9bw607M/VS60-MFC-PBTMDEMO-03-16-00-23-07-2021-min.jpg

4. Так должно выглядеть окно:
https://i.ibb.co/M9QwBxT/VS60-MFC-PBTMDEMO-04-16-02-23-07-2021-min.jpg

5. Добавим событие WM_TIMER:
https://i.ibb.co/mTbfKzt/VS60-MFC-PBTMDEMO-05-16-06-23-07-2021-min.jpg

6. Добавим событие на кнопку OnBtnStart:
https://i.ibb.co/Wz15dMy/VS60-MFC-PBTMDEMO-06-16-08-23-07-2021-min.jpg

7. Добавим typeи member для ProgressBar, у меня оно называется m_pbDemo:
https://i.ibb.co/ZdPcm2T/VS60-MFC-PBTMDEMO-07-16-12-23-07-2021-min.jpg

8. Добавим код:
Код MFCProgressBarTimerDemoDlg.h:

Код:
class CMFCProgressBarTimerDemoDlg : public CDialog
{
  private:
    unsigned int m_nTimer; // ID таймера
    int count; // счётчик
...

}

Код MFCProgressBarTimerDemoDlg.cpp:

Код:
// Срабатывает событие, при таймере
void CMFCProgressBarTimerDemoDlg::OnTimer(UINT nIDEvent) 
{
  // TODO: Add your message handler code here and/or call default
  m_pbDemo.SetPos(this->count); // Устанавливаем значение в ProgressBar
  this->count++; // Увеличиваем счётчик
  // Если счётчик > 99, то:
  if(this->count > 99) {
    KillTimer(m_nTimer);  // Удаляем таймер 
    this->SetWindowText("END"); // Меняем заголовок диалогового окна END
    MessageBeep(MB_ICONINFORMATION); // Бибикаем
  }
	
  CDialog::OnTimer(nIDEvent);
}

// Срабатывает событие, при нажатие на кнопку Start!
void CMFCProgressBarTimerDemoDlg::OnBtnStart() 
{
  // TODO: Add your control notification handler code here
  this->SetWindowText("ProgressBar Demo"); // Устанавливаем заголовок диалогового окна ProgressBar Demo
  m_pbDemo.SetRange(0, 100); // Устанавливаем что, ProgressBar от 0 до 100
  this->count = 0; // Сбрасываем счётчик
  m_nTimer = SetTimer(1,100,0); // Устанавливаем таймер
}

Вуаля!, работа нашей программы:
https://i.ibb.co/2qPv8wT/VS60-MFC-PBTMDEMO-RESULT-16-18-23-07-2021-min.jpg

0

2

Улучшим программу...
1. Для кнопки добавим type и member
https://i.ibb.co/YDsHTxH/VS60-MFC-01-23-47-24-07-2021-min.jpg

2. Назавём кнопку m_btnStart:
https://i.ibb.co/8P4M6RY/VS60-MFC-02-23-47-24-07-2021-min.jpg

https://i.ibb.co/jyv0K1k/VS60-MFC-03-23-47-24-07-2021-min.jpg

Код:

Код:
void CMFCProgressBarTimerDemoDlg::OnTimer(UINT nIDEvent) 
{
  // TODO: Add your message handler code here and/or call default
  m_pbDemo.SetPos(this->count);
  this->count++;
  if(this->count > 99) {
    KillTimer(m_nTimer);
    this->SetWindowText("END");
    MessageBeep(MB_ICONINFORMATION);
    m_btnStart.EnableWindow(true); // кнопка разблокирована
  }
	
  CDialog::OnTimer(nIDEvent);
}

void CMFCProgressBarTimerDemoDlg::OnBtnStart() 
{
  // TODO: Add your control notification handler code here
  this->SetWindowText("ProgressBar Demo");
  m_pbDemo.SetRange(0, 100);
  this->count = 0;
  m_nTimer = SetTimer(1,100,0);
  m_btnStart.EnableWindow(false); // блокируем кнопку
}

0