IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] Fenêtre de chargement


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut [MFC] Fenêtre de chargement
    Bonjour,

    Je souhaiterai savoir s'il existe un moyen pas trop compliqué (je n'ai pas bcp de temps avant la remise de mon projet) de faire une fenêtre de chargement :

    j'ai des méthodes (lancers de rayons et compagnie) qui prennent pas mal de temps (quelques secondes ... une dizaine, voir une vingtaine des fois) , et je voudrais faire patienter l'utilisateur pendant ce temps là, et qu'il sache que si il n'a plus la main ce n'est pas que l'appli est plantée :-)

    Donc je voudrais afficher une petite boite avec un indice de chargmment (pourcentage) ...

    Cmment faire ?

    Est-ce que ça a un rapport avec les splash screen ? Je suis allé sur Code Guru, j'ai recup un code, mais comment faire pour que la durée d'affichage de la splash dépende du temps d'éxecution de mes méthodes parallèles ? Ou plutot, comment afficher ma barre de progression si je ne connais pas à priori combien de temps ça va prendre ?

    Pleins de questions hein =)

    Merci bcp !

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut, il fallait voir plutot du cote progresscontrol:
    ce lien est pas mal et simple:
    http://www.codeguru.com/controls/progress_wnd.shtml

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Euh oui c cool =) mais comment je fais si je connais pas la durée pendant laquelle je veux qu'elle s'affiche stp ?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    dans ce cas il ne faut pas raisonner en temps de traitement mais en quantite .
    si tu ne peux pas apprecier par prog la somme de choses a faire pour realiser un traitement l'important sera de prevenir l'utilisateur qu'il se passe quelque chose.
    exemple si tu sais qu' a l'avance tu dois faire une boucle qui itere 20 fois ou 5 fois 20 .
    la valeur de SetRange(int nLower, int nUpper, int nStep = 1);
    sera 0 ,100 (5 * 20) et a toi dans tes boucles de faire avancer de 1 par SetPos pour une iteration .
    maintenant si rien n'est quantifiable fixe de 0 a 100 incremente manuellement dans ton traitement quand tu arrive au bout tu remets le compteur a zero etc...
    si cette methode n'est pas acceptable tu peux aussi te contenter d'un simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BeginWaitCursor(); // affichage d'un sablier
    // mon traitement.
     EndWaitCursor(); // fin du sablier
    attention quand tu faits des boucles de traitement de laisser l'application traiter les messages externes paint ,clavier ,souris etc...
    avec ce bout que j'ai deja indique dans le forum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    void PumpMessages()
    {
       // Handle dialog messages
        MSG msg;
        while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            if (!AfxGetApp()->PreTranslateMessage(&msg))
          {
             ::TranslateMessage(&msg);
             ::DispatchMessage(&msg);
         }           
         AfxGetApp()->OnIdle(0);   // updates user interface
        AfxGetApp()->OnIdle(1);   // frees temporary objects
        } 
    }
    a rajouter au milieux des traitements boucles sous peine d'avoir a l'ecran des que l'on bouge une applie qui semble figee.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Oki merci je vais regarder tout ça :-)

    euh le pumpmessage cà mettre où exactement ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par farscape
    a rajouter au milieux des traitements boucles sous peine d'avoir a l'ecran des que l'on bouge une applie qui semble figee.
    ça veut dire que je créer moi m^me PumpMessage dans le doc, et qu'en suite je l'appelle dans chacune de mes boucles ?

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    tu mets la fonction dans la classe qui t' interesses et l'appel au milieu de chaque boucle de traitement.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Dis moi, est-ce qu'il y a des effets "pervers" à cette fonction ? =)

    En effet, je constate deux choses :
    - une plutot bonne : j'ai l'impression que ça réduit le temps d'éxécution de certaines de mes méthodes ????
    - une plutot mauvais =) : je place pumpMessage dans une fonction récursive, et ça fait tout planter =). C'est normal ?

    Dans tous les cas, c'est vrai que au moins l'appli n'est pas figée ;-)

    Merci bcp donc.

    Si tu peux m'éclaircir sur les 2 pts au dessus, je suis preneur ! =)

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    si ca reduit le temps de certaines de tes fonctions c'est que celles ci accedent au GDI mais comme elles n'avaient plus de loisirs de recevoir les messages de l'applie ca peux ralentir un traitement file d'attentes qui grossit etc...
    de maniere general il faut que ton application respire et cette fonction lui permet de router les messages correctements.
    si ca plante dans ta fonction je suis un peu surpris . ca plante sur quoi exactement ?
    sauf si tu a mis beaucoup de variables locales a la fonction et que la profondeur de te recursivite te joues des tours maintenant.....

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par farscape
    sauf si tu a mis beaucoup de variables locales a la fonction et que la profondeur de te recursivite te joues des tours maintenant.....
    C'est à dire ? Car effectivement, je pense que ça peut être ce genre de pb, car en fait ça ne plante pas tout le temps ... ça doti planter qd c assez profond ...

    Quel genre de pb je peux avoir du fait des variables locales ?

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    les variables locales de ta fonction prennent de la place dans la pile et celle ci n'a pas une taille infinie alors à un moment donné si tu depasses....
    sanction immediate.
    la taille par defaut si je me souviens bien est de 1 M° .

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    merci bien je vais regarder de ce coté là =)

    T'auras surement de mes news bientôt =))))

    Heureusement q t là en tout cas ;-)

    Petit à petit, je deviens moins petit =)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Dis moi, ton PumpMessages() , j'ai l'impression qu'il me crée des pbs de perte de mémoire ... Je le met dans une boucle ou je fais de la lecture de fichier, et je perds une aprtie des infos =)

    C'est normal ?

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ça me surprend ce que tu dis,j'utilises ça assez massivement dans des boucles ,chargement etc...
    jamais eu de pb , de plus ce n'est ni plus ni moins ce que fait un prog MFC
    utilisisations d'appi 32 pour recuperer les messages etc....

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    ah ...

    Bon, je regarderai si ça peut venir de moi ... mais quand j'enlève l'appel à ta méthode, ça marche mieux (en ce qui concerne la perte de données en tout cas).

    Mais la perte de données epliquerait le fait que mes fonctions gagnaient en temps de calcul =)

    J'essaierai de te poster une méthode type ou je l'utilise et ou j'ai ce pb, peut être que je l'utilise mal !

    A+++

  16. #16
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    c'est le cote perte de données qu'il faut que tu developpes c'est un peu flou pout l'instant.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    En fait, j'ai pas le code sous la main (je l'aurai ce soir).

Discussions similaires

  1. Fenêtre de chargement
    Par jaquetanto dans le forum C#
    Réponses: 3
    Dernier message: 02/05/2008, 21h15
  2. Création d'une fenêtre de chargement
    Par mattyeux dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 11/02/2007, 02h34
  3. Réponses: 3
    Dernier message: 14/11/2005, 14h15
  4. [MFC] sauvegarde et chargement de fichiers
    Par Aradesh dans le forum MFC
    Réponses: 5
    Dernier message: 31/03/2005, 12h21
  5. [MFC VC.NET] Chargement dynamique de DLL
    Par vanitom dans le forum MFC
    Réponses: 3
    Dernier message: 26/01/2005, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo