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] Problème avec les Threads (et les progressBar)


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut [MFC] Problème avec les Threads (et les progressBar)
    Bonjour à tous !

    Je developpe actuellement un controle activex qui contient une boite de dialogue contenant un bouton Cancel et une progressBar, cette boite dialogue permet de suivre le cours d'un téléchargement.

    Mon problème vient du fait que je crée ma boite de dialogue en faisant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CTransfer::ShowDialog()
    {
    	myProgrBar = new CProgressBar();
    	if(myProgrBar != NULL)
       {
    	   BOOL ret = myProgrBar ->Create(IDD_PROGRESSBAR);
          if(!ret) 
             AfxMessageBox("Error creating Dialog");
          myProgrBar->ShowWindow(SW_SHOW);
       }
    }
    Dans mon object CProgressBar, j'ai deux objets un CProgressCtrl et un Button. Voici son constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BOOL  CProgressBar::OnInitDialog() 
    {
    	m_buttonCancel = new CButton();
    	m_buttonCancel->Create("Cancel",WS_VISIBLE|BS_PUSHBUTTON, CRect(149,62,249,90), this, 1);
    	m_progrCtrl = new CProgressCtrl();
    	m_progrCtrl->Create(WS_VISIBLE|PBS_SMOOTH, CRect(7,20,540,60),  this, 1);
    	m_progrCtrl->SetStep(8);
    	return TRUE;
    }
    Mon problème c'est que j'ai l'impression de ne pas avoir la main pour pouvoir appuyer sur le bouton Cancel, il y a même des fois où le bouton n'apparait pas. Je pense qu'il faudrait faire l'équivalent du "DoEvent" en VB pour que tout rentre dans l'ordre mais je ne sais pas si c possible avec VC++. Si vous avez des idées pour résoudre mon problème n'hesitez pas.

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut
    Ya t-il un equivalent du DoEvent en VB pour le C++, c'est à dire une méthode qui va lire les evenements de la souris et du clavier ??

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut
    J'essaye de resoudre mon problème avec des threads mais j'ai un problème de conversion assez bizarre puisque j'ai fait un c/c de msdn...
    Voici mon code :
    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
    #include <windows.h>
    #include <strsafe.h>
    #include "afxwin.h"
    void CProgressBar::stepIt()
    {   DWORD dwThreadId, dwThrdParam = 1; 
        HANDLE hThread; 
     
        hThread = CreateThread( 
            NULL,                        // attribut de securité par defaut
            0,                           // taille de la pile par defaut
            MonThread,                  // notre function
            &dwThrdParam,                // l'argument pour la fonction
            0,                           // flag de creation par defaut
            &dwThreadId);                // retourne l'id du thread	
    }
     
    DWORD WINAPI MonThread( LPVOID lpParam ) 
    { 
        MessageBox(0,"Nous avons passe comme parametre""thread","",MB_OK); 
        return 0; 
    }
    Lorsque je compile, j'obtiens l'erreur suivante :
    error C2664: 'CreateThread' : cannot convert parameter 3 from 'DWORD (LPVOID)' to 'LPTHREAD_START_ROUTINE'
    Quelqu'un a-t-il deja eu cette erreur ? Est ce quelle peut venir de mes includes ?
    Merci d'avance

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut
    Personne n'a eu cette erreur alors ?
    Est ce que cette erreur peut venir du fait que je sois en ThreadingModel = 'Apartment' ???

  5. #5
    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,
    deja essaye de rajouter un UpdateWindow() apres ton showwindow.
    apres ton probleme doit venir du fait que les messages n'arrivent a ta dialogue ,notemment si tu as un traitement en boucle .
    il manquerait alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MSG msg;
        // Handle dialog messages
        while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
          if(!IsDialogMessage(&msg))
          {
            TranslateMessage(&msg);
            DispatchMessage(&msg);  
          }
        }
    une petite pompe a message pour la dialogue au sein du traitement.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut
    Du fond du coeur merci Ca faisait 3 jours que je galerais avec les threads. Ouf !

    Encore une fois merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problèmes avec les thread et les pointeurs
    Par raspac dans le forum POSIX
    Réponses: 2
    Dernier message: 22/10/2006, 17h35
  2. problème avec strtok pour récupérer les vides
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 02/06/2005, 20h08
  3. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31

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