15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Время до завершения в прогресс баре.


Автор Craig Henderson

  • Скачать исходник - 3 Kb
  • Скачать демонстрационный проект - 22 Kb

    Sample Image

    Описание

    Иногда не достаточно процента выполненной операции в прогресс баре. Поэтому был придуман класс для отображения времени оставшегося до завершения операции.

    Класс использует простое линейное вычисление для получения оставшегося времени. Например, если в прогрессбаре уже выполнено 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;
    }