begin process at 2012 05 29 05:48:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

Faire avancer une bar de progression régulièrement: problème...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Faire avancer une bar de progression régulièrement: problème...

jeudi 14 septembre 2006 à 18:24:36 | Faire avancer une bar de progression régulièrement: problème...

by_rabbit_08

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:

BOOL APIENTRY Dialog3Proc(HWND hDlg3,UINT uMsg2,WPARAM wParam,LPARAM lParam)
{
    static HWND progress_bar;
    switch (uMsg2)
    {
     
      case WM_INITDIALOG:
     
      SetWindowText(hDlg3,"salut");
      InitCommonControls();
      progress_bar = CreateWindow(
                 PROGRESS_CLASS,
                 (LPSTR) NULL,
                  WS_CHILD|WS_VISIBLE,
                  0, 0, 385,25,
                  hDlg3,
                  (HMENU)ID_PROGRESS1,
                   hinstance2,
                   NULL);
        ShowWindow(progress_bar,SW_SHOWNORMAL);
      //SendMessage(hDlg3, WM_COMMAND, 0, 0);
        //while(SendMessage ( progress_bar , PBM_GETPOS , 0 , 0 )!=100)

       
      return FALSE;

      case WM_CREATE:

      SendMessage( progress_bar , PBM_SETRANGE , 0 , MAKELPARAM ( 0 , 100 ) ) ;
        SendMessage( progress_bar , PBM_SETSTEP , MAKEWPARAM ( 1 , 0 ) , 0 ) ;

        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!
jeudi 14 septembre 2006 à 18:39:57 | Re : Faire avancer une bar de progression régulièrement: problème...

racpp

Administrateur CodeS-SourceS
Salut,
Une boite de dialogue ne reçoit pas de WM_CREATE. Ce message est destiné aux fenêtres. Son équivalent est donc WM_INITDIALOG.

jeudi 14 septembre 2006 à 18:45:27 | Re : Faire avancer une bar de progression régulièrement: problème...

by_rabbit_08

Oui, mais comme je l'ai marqué, cela se bloque dans WM_INITDIALOG, je n'arrive pas à faire avancer la bar de progression, sais-tu pourquoi?
jeudi 14 septembre 2006 à 18:47:45 | Re : Faire avancer une bar de progression régulièrement: problème...

racpp

Administrateur CodeS-SourceS
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.
jeudi 14 septembre 2006 à 18:52:43 | Re : Faire avancer une bar de progression régulièrement: problème...

by_rabbit_08

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
jeudi 14 septembre 2006 à 19:10:42 | Re : Faire avancer une bar de progression régulièrement: problème...

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
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.

jeudi 14 septembre 2006 à 19:12:43 | Re : Faire avancer une bar de progression régulièrement: problème...

racpp

Administrateur CodeS-SourceS
J'ai oublié le return FALSE; après KillTimer().

jeudi 14 septembre 2006 à 19:17:47 | Re : Faire avancer une bar de progression régulièrement: problème...

by_rabbit_08

Yé ca marche!! merci beacoup!!
jeudi 14 septembre 2006 à 22:06:06 | Re : Faire avancer une bar de progression régulièrement: problème...

Joky

Membre Club
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

ULARGE_INTEGERJokyQi=QI("Joky"

jeudi 14 septembre 2006 à 23:22:02 | Re : Faire avancer une bar de progression régulièrement: problème...

by_rabbit_08

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é

1 2

Cette discussion est classée dans : progress, bar, sendmessage, wm, hdlg3


Répondre à ce message

Sujets en rapport avec ce message

pb de progress bar en visual c++ [ par glipper ] Voila je debute en programmation visual c++ et je n'arrive pas à faire marcher une progress bar. J'arrive à la faire apparaitre dans ma boite de dialo progress bar [ par yangan ] Comment marche une progress bar en c++ sous visual(avec mfc)? URGENT-vc++ [ par yangan ] G deux petits problèmes sou vc++ et ça devient très urgent!1-comment faire un progress bar inversé cad comment faire pour qu'il avance de droite à gau Progress Bar [ par thebigbang ] Bonjour,Comment faire pour insérer une progress bar dans un projet VC++ ?J'ai essayé d'en déposer une sur la fenetre mais lorsque je compile, rien ne SendMessage() & WM_KEYUP [ par Manson ] Salut a tous,voila, j'ai un process qui tourne en multithread pour chopper les touches utiliser et j'aimerai qu'il les envoi a la fenetre principale ( status bar et progress bar (win32) [ par Elendal ] J'ai créé une status Bar en deux parties.Dans la première partie, j'affiche du texte. Là pas de problème.Dans la deuxième par contre, je voudrais mett Progress bar dès initialisation dialogbox [ par goutbouyo ] Salut,J'ai crée une progrssbar dans ue boite de dialog.La barre commence à progresser quand j'appuie sur le bouton GO.Mais je voudrais qu'elle démarre Hook clavier pendant progressbar [ par goutbouyo ] Salut,Je voudrais mettre un hook général sur le clavier pendant une progress bar.J'ai essayé en mettant un WinExec sur un programme trouvé sur ce site Pb débit USB / affichage progress bar [ par goondy ] Bon, soyons concis et précis!Je veux transférer des fichiers sur mon baladeur mp3, c'est comme une clé usb.Pour copier : j'ai utilisé SHFileOperation, magnipulation d'un progressbar [ par ngatcha ] corinne petguet /*GetDlgItem(hdlg, IDC_PROGRESS); hProgress = CreateWindowEx(0, PROGRESS_CLASS, (LPSTR) NULL, WS_CHILD | WS_VISIBLE, 10, 10, 200, 20,


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales