MSVK95 Ответов: 1

Как реализовать управление индикатором выполнения при чтении из файла в диалоговом приложении MFC с использованием C++?


Привет,
Я разрабатываю проект, в котором мне нужно прочитать файл и отобразить его ход. После завершения он должен выдать сообщение о том, что извлечение прошло успешно. Я разрабатываю код с использованием c++. Я создал диалоговое окно с индикатором выполнения и назначил управляющую переменную m_Progress для управления индикатором выполнения.
Я также создал еще одно диалоговое окно, которое принимает путь/имя файла для чтения. Я не знаю, как сопоставить индикатор выполнения с операцией чтения данного файла.
Любая помощь будет очень признательна.

Что я уже пробовал:

Я пробовал читать файл строка за строкой, и пока он не достигнет eof, я бы вызвал метод StepIt () m_Progress. Но это совсем не показывает прогресса.

1 Ответов

Рейтинг:
2

Richard MacCutchan

Вы начинаете с расчета объема обрабатываемых данных, который является вашим 100% значением. Затем, когда вы читаете данные, вы перемещаете индикатор выполнения на любой процент обработанного файла. Вы можете сделать это на основе передаваемых данных или с помощью таймера для обновления с фиксированными интервалами.


MSVK95

Спасибо за ответ, но не могли бы вы предоставить более подробную информацию о том, как я должен реализовать это, чтобы сделать все правильно?

MSVK95

Я работаю над Visual Studio 2010, и единственный способ показать прогресс, который я нашел, - это реализовать этот фрагмент кода в методе "DoDataExchange".

Код бытия:

void dialog_class :: DoDataExchange(CDataExchange* pDX)
{
CDialogEx :: DoDataExchange(pDX);
DDX_Control(PDX, что IDC_PROGRESS1, m_Progress);
m_Progress.SetRange(0, 100);
m_Progress.SetStep(2);
for (int i = 0;i < 50; i++)
m_Progress.Stepit осуществляет();
}

Richard MacCutchan

Но на самом деле это не имеет никакого отношения к прогрессу вашей передачи данных. Вам нужен какой-то способ фиксировать объем передаваемых данных и обновлять индикатор выполнения по мере продолжения передачи. Как я уже упоминал выше, вы можете сделать это в той части кода, которая выполняет фактическую передачу, или с помощью таймера, чтобы сделать это через фиксированные интервалы. Видеть Индикатор Выполнения (Windows)[^] для получения более подробной информации о том, как управлять контролем индикатора выполнения.