Bonjour,
Est-ce qu'il y a un bug avec les progress bar sous Vista ? Sous XP j'ai un comportement normal : la barre pour 100% occupe la totalité du contrôle, sous Vista elle n'occupe que les 3/4.
Merci.
Version imprimable
Bonjour,
Est-ce qu'il y a un bug avec les progress bar sous Vista ? Sous XP j'ai un comportement normal : la barre pour 100% occupe la totalité du contrôle, sous Vista elle n'occupe que les 3/4.
Merci.
Ca semble être une sombre histoire d'animation...Il n'y a pas de bug en fait mais ma façon de gérer mon progress control n'a plus le même comportement entre XP et Vista.
On dirait que par défaut Vista utilise une animation et que XP non. Si quelqu'un à des infos la dessus...
Finalement la cause du problème est simple. Lorsqu'on fait un SetPos(x) Vista fait une animation pour passer de la position courante à la position x. Ca prend un certain temps t. J'ai un thread qui s'occupe de faire avancer la position, seulement ce thread met à jour la position tous les t' avec t' < t. Mon thread ayant atteint la position 100%, le traitement est terminé, mais la progress bar est à la traine, toujours à l'état d'animation.
La solution temporaire que j'ai trouvé c'est d'augmenter t' pour qu'on ait t' > t, le résultat est moins pire.
Si quelqu'un à une solution, qui fonctionne pour XP et Vista, je prends.
Un autre moyen c'est de dériver la classe CProgressBar et de surcharger le OnPaint() qui est appelé sans arrêt pendant l'animation...mais ça me fait perdre les styles XP et Vista.
salut,
Le manque de fluidité est du au fait que ton thread ne laisse pas respirer l'application..
il faudrait rajouter sur le setpos un appel a la pompe a messages.
http://cpp.developpez.com/faq/vc/ind...rk#PumpMessage
En fait quand je dis thread c'est un timer en fait, toutes les 10ms.
Sinon pour une autre progress bar j'ai un SendMessage() dans un thread, le message est récupéré dans le WindowProc() et celui ci fait le SetPos.
J'ai le même problème dans les deux cas.
J'ai dérivé CProgressCtrl et réécrit un OnPaint(), la je n'ai plus de problèmes, mis a part que le OnPaint() est appelé plus souvent qu'il ne devrait.
Je vais essayer ta solution.
L'appel à la fonction PumpMessage() ne fonctionne pas, j'ai toujours le même problème.
Farscape, peux-tu me confirmer qu'il n'y a jamais eu d'animation des progress bar sous xp ?
J'ai fais un projet tout simple sous vista, une fenêtre avec une progress bar dedans. Dans le OnInitDialog() je fais un SetPos(100). Des que la fenêtre apparait, je vois une animation de la progress bar, qui démarre de 0 pour aller à 100, en 2 secondes environ.