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 :

Pompe à messages


Sujet :

MFC

Vue hybride

Rupella Pompe à messages 12/03/2006, 12h26
farscape salut, voir plutot la pompe... 12/03/2006, 12h39
Rupella Je l'avais implémentée... 12/03/2006, 12h48
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut Pompe à messages
    Bonjour, bon dimanche !

    j'ai un petit souci dont j'aimerais vous faire part...
    je fais un petit soft de copie de fichiers qui utilise CopyFileEx et
    une fonction pour le suivi de la copie :

    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
    17
    18
    19
    20
    21
    22
    23
     
      DWORD ret = PROGRESS_CONTINUE;
     
      CMyCopyFileDlg* ptr = (CMyCopyFileDlg*)lpData;
     
      // On calcule un pourcentage pour la progression du fichier
      DWORD percent = (TotalBytesTransferred.QuadPart * 100) / TotalFileSize.QuadPart;
      ptr->m_progressFile.SetPos(percent);
     
      DWORD left = TotalFileSize.QuadPart - TotalBytesTransferred.QuadPart;
     
      // On prépare une string avec les données transférées et restantes...
      ptr->m_strAvancementFic.Format("%d bytes copied, left : %d bytes", 
                                TotalBytesTransferred.QuadPart, left);
     
      AfxGetApp()->PumpMessage();
     
      ptr->UpdateData(FALSE);
      if ( ptr->m_annuleCopie == TRUE )
      {
         ret = PROGRESS_CANCEL;
      }
      return ret;
    Ca marche très bien .... rafraichissement de la fenêtre garanti ... sauf
    que si il n'y a pas de messages (souris qui passe au dessus de la fenêtre....) il ne se passe rien...

    dois je faire un InvalidateRect() pour forcer l'envoi de messages, ou une solution meilleure ?

  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
    Par défaut
    salut,
    voir plutot la pompe a message de la faq:
    http://c.developpez.com/faq/vc/?page...rk#PumpMessage

  3. #3
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    Je l'avais implémentée également... même histoire.
    Ce que j'ai fait, qui fonctionne, sans forcément me satisfaire :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
      DWORD ret = PROGRESS_CONTINUE;
     
      CMyCopyFileDlg* ptr = (CMyCopyFileDlg*)lpData;
     
      // On calcule un pourcentage pour la progression du fichier
      DWORD percent = (TotalBytesTransferred.QuadPart * 100) / TotalFileSize.QuadPart;
      ptr->m_progressFile.SetPos(percent);
     
      DWORD left = TotalFileSize.QuadPart - TotalBytesTransferred.QuadPart;
     
      // On prépare une string avec les données transférées et restantes...
      ptr->m_strAvancementFic.Format("%d bytes copied, left : %d bytes", 
                                TotalBytesTransferred.QuadPart, left);
     
      CRect rect;
    [b]
      ptr->GetClientRect(rect);
      ptr->InvalidateRect(rect, FALSE);
    [/b]
      AfxGetApp()->PumpMessage();
     
      ptr->UpdateData(FALSE);
      if ( ptr->m_annuleCopie == TRUE )
      {
         ret = PROGRESS_CANCEL;
      }
      return ret;
    bon, ca fonctionne, mais j'ai peur que ca perde du temps a repeindre
    plutot que faire le reste ...

Discussions similaires

  1. Pompe à messages dans un service
    Par engi dans le forum C++Builder
    Réponses: 6
    Dernier message: 14/05/2013, 13h56
  2. Threads STA + pompe à messages
    Par mexong dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/08/2009, 09h23
  3. How To, Pompe a message et sockets
    Par comode dans le forum Débuter
    Réponses: 4
    Dernier message: 01/04/2009, 17h21
  4. Qu'est ce que la pompe à messages d'une application?
    Par Leemon dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2007, 15h01
  5. A lire impérativement avant de poster un message
    Par ok.Idriss dans le forum Demandes
    Réponses: 0
    Dernier message: 01/05/2002, 18h57

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