Accueil > Forum > > > > Update de l'affichage de plusieurs fenêtres
Update de l'affichage de plusieurs fenêtres
dimanche 17 septembre 2006 à 20:24:19 |
Update de l'affichage de plusieurs fenêtres

by_rabbit_08
|
Bonsoir! J'aurais une petite question! J'ai créé un programme qui pendant un certain temps gère des caractères et les modifie, pour du cryptage. Donc pendant ce temps la, j'ai placé une barre de progression. Pour la modification des caractères, ca donne un peu près ca, en language courant: while(!feof(fichier) { //Ici, je lis les caractères et les modifies, le code n'est pas important, je ne le met pas... SendMessage(progress_bar, PBM_SETPOS, Pourcentage, 0); } Avec bien sur un incrémentation à chaque fois pour le pourcentage... Le problème c'est que pendant ce temps, si je passe une autre fenêtre par dessus, toute mon application est gelé, et on ne voit plus rien, je ne sait donc pas comment mettre à jour. J'ai essayé simplement avec UpdateWindow, mais ça ne marchait pas très bien, et ça prennait plus de temps qu'autre chose. Est-ce que quelqu'un aurait une solution à mon problème? Ensuite, 2ème simple petite question, tout cela se fais dans une procédure de boite de dialogue, et à partir de cette procédure je lance une nouvelle boite de dialogue où il y a ma barre de progression. En gros ça donne ça: MainWindow |_____________> hDlg1--> Modification des caractère |________>hDlg2--->Barre de progression Donc comment faire pour que lorsque la boite de dialogue 2 est ouverte, on ne puisse pas "activer" la première boite de dialogue? Enfin comme pour la boite de dialogue 1 par rapport à la fenêtre principale... J'espère que c'est clair! Merci à ceux qui veulent bien m'aider 
|
|
dimanche 17 septembre 2006 à 23:23:58 |
Re : Update de l'affichage de plusieurs fenêtres

BruNews
|
On met une dialog modale quand on ne veut pas qu'une autre puisse être ouverte. Une procédure longue doit aller dans un thread.
ciao... BruNews, MVP VC++
|
|
lundi 18 septembre 2006 à 09:41:50 |
Re : Update de l'affichage de plusieurs fenêtres

by_rabbit_08
|
Alors j'ai en quelques sortes résolu le deuxième problème, mais quoique... Etant donné que mes dialogbox étaient déjà modales, j'ai placé 2-3 EnableWindow.. Mais je vais encore voir. Mais le problème revient au même, c'est toujours pour mettre à jour l'affichage de mon programme pendant l'encryptage.. Je ne sais pas si tu as répondu à cela BruNews, en parlant de procédure longue et de thread, peux-tu m'en dire un peu plus? Merci
|
|
lundi 18 septembre 2006 à 09:58:52 |
Re : Update de l'affichage de plusieurs fenêtres
|
lundi 18 septembre 2006 à 10:42:31 |
Re : Update de l'affichage de plusieurs fenêtres

by_rabbit_08
|
Merci c'est gentil, j'ai déjà réussi à créer un petit peu, en ayant ma procédure de boite de dialogue, qui appelle un thread. Dans la procédure du thread, il y a ceci:
SendMessage( progress_bar , PBM_SETRANGE , 0 , MAKELPARAM ( 0 , 100 ) ) ; SendMessage( progress_bar , PBM_SETSTEP , MAKEWPARAM ( 1 , 0 ) , 0 ) ;
//cryptage de mes caractères..... et mise à jour de la progress_bar
return 0;
Et je suis sur que le programme s'execute jusqu'à l'affichage de la progress_bar, au début, mais ne va pas plus loin. Comment cela se fait-il? Doit je récupérer des messages quelques part? Genre avec GetMessage()? Serait-il possible d'avoir un petit peu d'aide complémentaire vite dit... Merci bien
|
|
lundi 18 septembre 2006 à 10:55:12 |
Re : Update de l'affichage de plusieurs fenêtres

by_rabbit_08
|
Je tiens juste à clarifier un tout petit peu les choses, car je vois que ce n'est pas clair du tout... Voila mon code en un peu plus clair:
//voilà la boite de dialogue sur laquelle la progressbar s'affiche BOOL APIENTRY Dialog3Proc(HWND hDlg3,UINT uMsg2,WPARAM wParam,LPARAM lParam) { switch (uMsg2) { case WM_INITDIALOG: //SetWindowText(hDlg3,"salut"); EnableWindow(hDlg2,FALSE);//fenêtre depuis la quelle on affiche la boite de dialogue contenant la progress_bar EnableWindow(hwnd2,FALSE); InitCommonControls(); progress_bar = CreateWindow( PROGRESS_CLASS, (LPSTR) NULL, WS_CHILD|WS_VISIBLE|PBS_SMOOTH, 5, 10, 345,25, hDlg3, (HMENU)ID_PROGRESS1, hinstance2, NULL); ShowWindow(progress_bar,SW_SHOWNORMAL); SetTimer(hDlg3,1,0,0); return FALSE; case WM_TIMER: KillTimer(hDlg3,1); hThread=CreateThread('\0','\0',ThreadProc,'\0','\0',&ThreadId); return FALSE; case WM_COMMAND: EndDialog(hDlg3,0); return TRUE; break; default: return FALSE; } }
DWORD WINAPI ThreadProc(LPVOID lpParam) { SendMessage( progress_bar , PBM_SETRANGE , 0 , MAKELPARAM ( 0 , 100 ) ) ; SendMessage( progress_bar , PBM_SETSTEP , MAKEWPARAM ( 1 , 0 ) , 0 ) ;
//Ici ce trouve tout le travail, les calculs, l'affichage de la progress_bar, etc...
EnableWindow(hDlg2,TRUE); EnableWindow(hwnd2,TRUE); EndDialog(hDlg3,0); return 0; }
Voila! Donc enfait, depuis mon dernier message, j'ai fait quelques modification, et maintenant ça marche, sauf que c'est extrêment lent, et que la ligne tout à la fin EndDialog(hDlg3,0); n'agit pas.. J'entends par la, que la boite de dialogue(hDlg3) contenant la progress_bar ne se ferme pas :S Voila j'ai essayé d'être le plus clair possible, ça serait gentil d'obtenir un petit peu d'aider :O Merci d'avance
|
|
lundi 18 septembre 2006 à 11:08:53 |
Re : Update de l'affichage de plusieurs fenêtres

BruNews
|
Beaucoup trop le souk: - Pourquoi un timer ? - Que fait InitCommonControls() ici, se met au debut de WinMain. - Mets la progressbar avec def de la dialog dans le fichier rc.
Toute la conception à revoir, pas le temps.
ciao... BruNews, MVP VC++
|
|
lundi 18 septembre 2006 à 11:43:28 |
Re : Update de l'affichage de plusieurs fenêtres

by_rabbit_08
|
Ben le timer, c'est pour que la progress_bar s'affiche dès le lancement de la dialogbox, c'est quelqu'un sur le forum qui me l'avait conseillé! InitCommonControls(), je l'ai placé au début de mon programme néanhmoins ca ne change rien. Et la progressbar, pourquoi est-ce que je devrait la déclarer en fichier rc? Je la créer avec CreateWindow, jusque la ça allait bien! :O C'est la aussi quelqu'un du forum qui me la conseillé... Mais si c'est indispensable, dis le moi! Mais au pire de la lenteur, je m'en fiche, j'aimerais juste savoir comment faire pour que mon EndDialog(hDlg3,0) à la fin de mon programme fonctionne et que la boite de dialogue qui contient la progressbar se ferme... Est-ce que c'est possible, vu comme j'ai fais les choses? Merci
|
|
lundi 18 septembre 2006 à 17:21:53 |
Re : Update de l'affichage de plusieurs fenêtres

BruNews
|
La création des controles est au bas mot 200 fois plus rapide si tout est en ressource plutot qu'a coup de CreateWindow. Je fais donc le cas que tout est défini dans le rc.
#define THRD_INIT (WM_USER + 100) #define THRD_END (WM_USER + 101) HANDLE hthread = 0;
DWORD WINAPI ThreadProc(LPVOID pparam) { // BOULOT DU THREAD ICI // HWND PROGRESSBAR DANS pparam POUR LA MANIPULER // ABSOLUMENT SORTIR A LA LIGNE DESSOUS QUOI QU'IL ARRRIVE thrdExit: PostMessage(GetParent((HWND) pparam), THRD_END, 0, 0); return 0; }
INT_PTR CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam) { switch(mssg) { case WM_INITDIALOG: SetClassLongPtr(hdlg, GCLP_HICON, (long)LoadIcon(0, IDI_APPLICATION)); // ON LANCE THREAD EN LAISSANT AFFICHAGE SE FAIRE (return 1) PostMessage(hdlg, THRD_INIT, 0, 0); return 1; case THRD_INIT: hthread = CreateThread(0, 0, ThreadProc, (LPVOID) hPrgrss, 0, 0); break; case THRD_END: CloseHandle(hthread); hthread = 0; // AUTRES TRUCS SI BESOIN break; case WM_COMMAND: switch(wParam) { case IDCANCEL: if(!hthread) EndDialog(hdlg, 0); } } return 0; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z) { InitCommonControls(); DialogBoxParam(hInstance, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0); return 0; }
ciao... BruNews, MVP VC++
|
|
lundi 18 septembre 2006 à 17:47:47 |
Re : Update de l'affichage de plusieurs fenêtres

by_rabbit_08
|
Merci :D! J'ai pas encore lu, mais merci beaucoup d'avance! 
|
|
Cette discussion est classée dans : temps, barre, boite, caractères, dialogue
Répondre à ce message
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|