by_rabbit_08
Messages postés109Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention15 mai 2007
-
14 sept. 2006 à 18:24
by_rabbit_08
Messages postés109Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention15 mai 2007
-
15 sept. 2006 à 12:39
Bonjour!
J'ai un tout petit problème avec une progressbar... bizar non?
Enfait, je voudrais qu'elle s'affiche toute seule lors de l'ouverture d'une boite de dialogue! Donc pour l'affichage pas de problème, mais j'aimerais qu'elle se remplisse simplement selon un système de for(i=0;i<100;i++) avec des Sleep de 1 seconde entre chaque avancement! Néanmoins, il n'y a un truc qui joue pas, car je ne sais si je dois la mettre dans WM_COMMAND, dans WM_CREATE, etc... Alors j'explique, j'ai commencé par la mettre dans WM_INITDIALOG, mais elle ne s'affichait pas dû aux Sleep, et s'affichait, une fois que tout était terminé, vaguement et disparaissait! J'ai alors tanté de la mettre dans WM_COMMAND; mais la je la voyais se remplir lorsque j'appuyais sur la croix pour fermer la fenêtre! J'ai alors essayé dans WM_CREATE, mais là, rien du tout! Donc comment faire pour qu'elle s'affiche automatiquement à l'ouverture de la boite de dialogue, et qu'elle n'ai pas besoin d'interaction avec l'utilisateur? Voici le petit bout de code:
for(i=0;i<100;i++)
{
SendMessage(progress_bar, PBM_SETPOS, i, 0);
Sleep(10);
}
return TRUE;
case WM_COMMAND:
EndDialog(hDlg3,0);
return TRUE;
break;
default:
return FALSE;
}
}
Comme vous pouvez le voir, elle est ici dans WM_CREATE... Ah oui, j'ai essayé une dernière possibilité: je l'ai placé dans WM_COMMAND; et dans WM_INITDIALOG, j'ai fais SendMessage(hDlg3, WM_COMMAND, 0, 0), mais cela a agit comme si je l'avais mis dans WM_INITDIALOG...
Est-ce que quelqu'un saurait? Je suis certain, que c'est une petite faute, mais je n'arrive pas à la trouver...
Merci!
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 14 sept. 2006 à 19:10
Si tu veux que la progressbar avance au lancement de la boite de dialogue, tu peux utiliser un timer car rien ne s'affiche tant que le traitement de WM_INITDIALOG ne retourne pas une valeur (FALSE dans ton cas). On initialise alors un timer à la fin de ce traitement en utilisant la fonction SetTimer(). On met la boucle dans le traitement du message WM_TIMER. Juste après la boucle, on détruit le timer avec KillTimer():
case WM_INITDIALOG:
//......
SetTimer(hDlg3,1,1000,0);
return FALSE;
case WM_TIMER:
// boucle d'avancement
KillTimer(hDlg3,1);
Dans cet exemple, l'avancement de la progressbar commence une seconde après l'affichage de la boite de dialogue.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 14 sept. 2006 à 18:47
L'avancement de la progressbar doit se faire en dehors de WM_INITDIALOG.
Pour regarder ta progressbar se remplir tu peux utiliser un timer ou ajouter un bouton.
Le paramètre lParam de WM_COMMAND, contient le HWND du bouton cliqué.
C'est pendant le traitement de ce clic que tu mets ta boucle de
remplissage.
Vous n’avez pas trouvé la réponse que vous recherchez ?
by_rabbit_08
Messages postés109Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention15 mai 20071 14 sept. 2006 à 18:52
Merci de ta réponse, mais je suis désolé, je ne comprends pas :S
Dans quel partie du switch dois-je mettre la progression? et comment faire? Si c'est dans WM_COMMAND, comment faire pour que cela s'exécute, car s'il n'y a pas de bouton, le programme passe tout droit non? :O
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 14 sept. 2006 à 22:06
Comment on peut utiliser des progress bar et avoir autant de difficulté comme ça ???
Si tu prenais la peine de lire quelques ptits truc, tu poserais moins de question comme ça
C'est pas que ça me gêne, mais voilà quoi, WM_COMMAND, c'est lorsque tu fais une action, je pense pas qu'il y a ai la moindre action à faire pour faire avancer ta barre selon tes explications.
Lit une bonne doc !!! Met toi à la MSDN et réfléchi un tit peu
by_rabbit_08
Messages postés109Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention15 mai 20071 14 sept. 2006 à 23:22
C'est bien gentil, mais je sais pas si tu as remarqué, j'ai eu besoin d'aller dans WM_TIMER pour résoudre mon problème... Donc je sais pas si MSDN m'aurait beaucoup aider pour cela...Et le reste étaient des proposition, pour pas simplement exposer mon problème et ne pas laisse tout le monde se débrouiller, avec mon simple petit soucis... Enfin désolé
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 14 sept. 2006 à 23:29
Ben évidemment, mais y'a quand même une certaine logique à avoir quand on code.
C'est sur que tu n'aurais pas trouver WM_TIMER tout seul, mais on est là pour ça
En faite, faut juste éviter d'essayer à tatons et de réfléchir un tout ptit peu.
Après on pose les questions.