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] dialog & thread & progressbar


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Par défaut [MFC] dialog & thread & progressbar
    Bonjour,
    j'ai un ptit souci. je suis ds un thread et j aimerai pvoir
    faire augmenter le compteur de ma progress situé ds une dialog
    qui n'est pas la dialog main. Comment puis je faire ?
    avec la dialog main je faisais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    extern CWordDoxApp theApp;
    CProgressCtrl *m_progress = (CProgressCtrl *)theApp.m_pMainWnd->GetDlgItem(IDC_PROGRESS1);
    m_progress->SetRange(0,i+8);
    m_progress->SetPos(1);
    mais avec une autre que faire ?
    amicalement,
    Tigris

  2. #2
    Membre expérimenté
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Par défaut
    C'est quel genre de thread ? Si c'est un thread de travail, lors du lancement du thread, tu peux passer un parametre de ton choix (LPVOID), tu peux faire passer un pointeur vers la fenetre et le tour est joue.

  3. #3
    Membre confirmé Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Par défaut
    J'essaye de faire la même chose : dialog + thread + progress bar.

    1ère Question
    tu peux passer un parametre de ton choix (LPVOID)
    Je passe déja une instance en parametre, et il faudrait que je passe un deuxième paramètre pour faire le lien avec la fenètre de dialogue.
    Est-ce qu'il y a un moyen pour passer 2 paramètres :

    2ème Question
    A supposer qu'on puisse passer 2 paramètres, mon code ressemblerait à quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UINT threadStart(LPVOID pParam1,LPVOID pParam2)
    {
      ....
      static_cast<CProject*>(pParam1)->start();
      ....  
      ::PostMessage((HWND)pParam2,WM_UPDATE_PROGRESSBAR,valeur,0) ;
      ....
        return 0;
    }
    La fonction start() est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (int i=0; i < m_commands.GetSize() ; i++ )
    {
      if(m_commands.GetAt(i)->getSelected())
      {
        m_commands.GetAt(i)->execute();
      }
     
       // INCREMENTER LA PROGRESSBAR ICI
    }
    Si je veux que la progressbar soit incrémentée, il faudrait pouvoir mettre à jour la varible valeur du thread, et en plus envoyé le message (:ostMessage((HWND)pParam2,WM_UPDATE_PROGRESSBAR,valeur,0) ;.

    Est-ce que je peux fixer la valeur de valeur et commander l'envoie d'un message depuis la fonction start :

    Merci

  4. #4
    Membre expérimenté Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Par défaut
    Est-ce qu'il y a un moyen pour passer 2 paramètres ?
    Passer l'adresse d'une structure, d'un objet, d'un machin...
    Est-ce que je peux fixer la valeur de valeur et commander l'envoie d'un message depuis la fonction start ?
    Ben oui. Suffit que start connaisse le handle de la fenêtre.

  5. #5
    Membre confirmé Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Par défaut
    Concernant le passage de plusieurs paramètre j'ai fait ca :
    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
    struct SParameters{
     HWND window;
     CProject* project;
    };
     
    (...)
     
    SParameters arg;
     
    (...)
     
    arg.project=pMyProjectDoc->getProject();
    arg.window=GetSafeHwnd();
    AfxBeginThread(threadStart,&arg,THREAD_PRIORITY_NORMAL);
     
    (...)
     
    UINT threadStart(LPVOID pParam)
    {
      int valeur=0;
      static_cast<SParameters*>(pParam)->project->start();
      ::PostMessage(static_cast<SParameters*>(pParam)->window,WM_UPDATE_PROGRESSBAR,valeur,0) ;
       return 0;
    }
    PROBLEME:Si je lance l'application en mode debug ca marche.
    Si je fais simplement executer MonAppli.exe, je me fais insulter de tout les côtés à l'exécution, bug mémoire etc...

    Help !

Discussions similaires

  1. [MFC] fonction Create d'une ProgressBar
    Par lastcheper dans le forum MFC
    Réponses: 10
    Dernier message: 20/05/2005, 15h20
  2. [MFC] Dialog de sélection de destination
    Par toune dans le forum MFC
    Réponses: 3
    Dernier message: 22/03/2005, 15h46
  3. Réponses: 3
    Dernier message: 24/08/2004, 11h49
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

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