Probleme de Updata(FALSE) en visual c++

Résolu
Djule01 Messages postés 10 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 5 mars 2006 - 18 nov. 2005 à 23:55
Djule01 Messages postés 10 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 5 mars 2006 - 19 nov. 2005 à 14:25
Bonjour



J'ai un petit probleme en visual C++



Je voudrais qu' en cliquant sur un bouton se situant dans
une boite de dialogue, une instruction (Partie 1) s'execute puis que la
boite de dialogue se mettent a jour. Jusqu'ici rien de bien compliqué
:)



Mais je voudrais que au bout de 3 secondes (apres la 1re mise a
jour de la boite de dialogue) , il y ait une seconde instruction
(Partie 2) qui s'execute suivie d'une nouvelle mise a jours dans la
boite de dialogue.



A priori le codage de tout ca ne semble pas trop poser de pb mais voila 3 jours que je m'arrache les cheveux devant.



Voila le programme que j'ai créé :



void CProjetDlg::OnOK()
{

UpdateData(TRUE);
dlg_rep_user=m_rep;

//Partie 1
m_verif=Verification();
UpdateData(FALSE);

Sleep(30);

//Partie 2
dlg_quest=quest();
dlg_rep=trad();
m_ang=dlg_quest;
m_rep="";
drap=0;
UpdateData(FALSE);

}




Hors a l'execution de se programme, lorsque je clique sur le bouton
ok, il n'y a pas deux mise a jours de la boite de dialogue mais une
seule qui se produit apres le timer. Et je ne vois vraiment pas
pourquoi puisque le Updata(FALSE) est bien appelé juste apres
l'instruction 1.



Voyez vous un moyen d'obtenir se que je voudrais.



PS: le pb ne viens pas du timer puisque le meme resultat se produit losque je le remplace par le codage suivant :



long start, end;
time(&start);
do
{
time(&end);
} while(end-start<3);




Je pense plutot que le probleme viens du UpdateData

4 réponses

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
19 nov. 2005 à 04:21
Hum plus d'explication finalement :

UpdateData ne sert pas à rafraichir la fenêtre mais seulement à
transférer le contenu des variables dans lse boites de dialogue et
vice-versa. Le refresh des textbox se fait après l'exécution de la
fonction qui est exécutée en fonction de ce qui est reçu dans "la
trappe a message" dont pendant l'exécution d'un sleep le processus est
bloqué donc il ne peut pas faire de refresh de la fenêtre et ça la
condamne à rester figer avec la même connerie quand de cliquer sur le
bouton, donc si passe une fenêtre devant tu va voir que le résultat est
pas jolie.



Conclusion : UpdateWindow() ou meilleure offre



Bon j'espère avoir été utile à quelque chose

@+

MSN : x_men_40@hotmail.com
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2005 à 00:20
UpdaeData est un vrai piège à c**, prends l'habitude de mettre à jours les controles toi même:
GetWindowText
SetWindowText

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
19 nov. 2005 à 04:15
C'est pas un truc de fenêtre qui ne s'update pas ? UpdateWindow()
devant UpdateData(FALSE)... À cause du sleep qui gèle le redraw ...

@+

MSN : x_men_40@hotmail.com
0
Djule01 Messages postés 10 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 5 mars 2006
19 nov. 2005 à 14:25
Merci beaucoup BruNews et max12 pour vos reponse toute deux tres pertinantes

J'ai opté pour le UpdateWindows huste apres le UpdateData qui marche idéalement

Encore merci de m'avoir enlevé une epine du pied
0
Rejoignez-nous