2012-02-15 4 views
0

Im настройке индикатор следующим образом:Scaling значение прогресс бар

void CProgressBar::add(int ammount) 
{ 
    mProgress += ammount; 
} 

float CProgressBar::get() 
{ 
    float pr = (float)mProgress * 100.0f/(float)mMax; 
    return pr; 
} 

И вот теперь это problem.I'm пытается оказать небольшую поверхность, хотя это не правильно заполнить его, потому что я могу «т выяснить, как масштабируются значение:

/* 
    Progress bar box has size of 128x16 
    |-----------| 
    |-----------| 
*/ 
float progress = progressBar->get(); 
float scale = 4.0f; //Here i have it hardcoded although i have to make this generic 

progress *= scale; 
graphics->color(prgColor); 
graphics->renderQd(CRect(x,y,progress,height)); 

Так им любезно с просьбой о помощи по этому вопросу ...

+1

Это вопрос на C++, а не вопрос C, C# или что-то еще. Пожалуйста, выберите соответствующие теги ТОЛЬКО – Shai

ответ

1

Вы должны линейно интерполировать между шириной прямоугольник с шагом 0% и шириной прямоугольника со 100% -ным продвижением. Например:

float width_0 = 0.f; // or any other number of pixels 
float width_100 = 250.f; // or any other number of pixels 

Интерполяция работает следующим образом:

float interpolated_width = (width_100 - width_0) * progress + width_0; 

Важно: progress должен находиться в диапазоне от 0 до 1! Таким образом, вы можете изменить функцию CProgressBar::get() или делить на 100 в первую очередь.

Теперь вы можете просто визуализировать прямоугольник с новой шириной:

graphics->renderQd(CRect(x,y,interpolated_width,height)); 
+0

Спасибо, я попробовал, хотя это не имело никакого значения :( – user1010005

+0

@ user1010005: в чем проблема? Что именно не работает? – Constantinius

+0

Не обращайте на это внимание, я его исправил указав единицы пикселя на символ, а затем умножив его на шкалу. – user1010005

0

Ширина вашего прогресса бар 128 и Прогресс-> получить() возвращает что-то между 0 и 100, следовательно, не зная, ваши данные в библиотеке, похоже, ваша шкала должна быть 1,28

Я предполагаю, что mMax - это значение полного прогресса.

Для небольшого убора я бы сделал get() const и не использовал C-style casts.

+0

Спасибо, но похоже, что для него недостаточно 1.28. – user1010005

+0

И да nMax - это максимальное значение – user1010005

+0

Я исправил его, указав пиксельные единицы на символ и затем умножив его с масштабом. – user1010005

Смежные вопросы