2012-02-15 5 views
0

Im la mise en place d'une barre de progression comme suit:valeur barre de progression

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

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

Et maintenant, voici le problem.I'm tente de rendre une petite surface bien qu'elle ne remplit pas correctement parce que je peux « t comprendre comment à l'échelle correctement la valeur:

/* 
    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)); 

donc im demander de bien vouloir de l'aide en la matière ...

+1

Ceci est une question C++, pas une question C, C# ou toute autre question. Veuillez sélectionner les étiquettes pertinentes SEULEMENT – Shai

Répondre

1

Vous devez interpoler linéairement entre la largeur le rectangle avec progression de 0% et la largeur du rectangle avec progression de 100%. Par exemple:

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

L'interpolation fonctionne comme suit:

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

Important: progress doit être dans la gamme de 0 à 1! Donc, vous voudrez peut-être changer la fonction CProgressBar::get() ou diviser par 100 en premier.

Maintenant, vous pouvez simplement rendre le rectangle avec la nouvelle largeur:

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

Merci, je l'ai essayé, mais il n'a pas fait de différence :( – user1010005

+0

@ user1010005: quel est le problème? Qu'est-ce qui ne fonctionne pas exactement? – Constantinius

+0

Peu importe, je l'ai eu pour travailler.Je l'ai réparé par spécification des unités de pixel par caractère, puis en le multipliant par l'échelle – user1010005

0

La largeur de votre barre de progression est de 128 et la progress-> get() renvoie quelque chose donc entre 0 et 100, sans le savoir les détails de votre bibliothèque, il semble que votre échelle devrait être 1.28

Je suppose que mMax est la valeur de la progression complète.

Pour un peu de rangement je ferais get() const et ne pas utiliser les moulages de style C.

+0

Merci, mais semble que 1,28 ne suffit pas – user1010005

+0

Et oui nMax est la valeur maximale – user1010005

+0

Je l'ai fixé en spécifiant les unités de pixel par caractère, puis en le multipliant – user1010005