Скачать
демонстрационный проект - 22 Kb
Описание
Иногда не достаточно процента выполненной
операции в прогресс баре. Поэтому был придуман
класс для отображения времени оставшегося до
завершения операции.
Класс использует простое линейное вычисление
для получения оставшегося времени. Например,
если в прогрессбаре уже выполнено 10% и это заняло
5 секунд, то для завешения выполнения остаётся 45
секунд.
TProgressTimeToComplete
обеспечивает полную
функциональность и может служить как полная
замена для MFC класса CProgressCtrl
.
Имеется одна виртуальная функция, которая
может быть перегружена для настройки
отображения. GetRemainingText
вызывается для
форматирования вывода текстовой строки, которая
выводится поверх прогресс бара. Функция имеет
два аргумента процент выполненной операции и
время до конца выполнения операции - в секундах.
По умолчанию функция выглядит примерно так:
CString TProgressTimeToComplete::GetRemainingText(double lfPercent, double lfSecsRemaining)
{
CString str;
int nSeconds = (int)fmod(lfSecsRemaining, 60.0);
if (lfSecsRemaining < 60)
{
if (nSeconds < 1)
str = "Less than a second";
else
str.Format("%d second%s remaining", nSeconds, nSeconds==1? "":"s");
}
else
{
int nMinutes = (int)(lfSecsRemaining/60.0);
str.Format("%d minute%s, %d second%s remaining", nMinutes, nMinutes==1? "":"s",
nSeconds, nSeconds==1? "":"s");
}
return str;
}