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 :

Problème Programmation MFC


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    xyz
    xyz est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut Problème Programmation MFC
    Bonjour je repost ici car apparament c'était pas le bonne endroit,

    je développe actuellement une application avec Visual C++ et je me sert des MFC.

    Bref j'ai crée une Edit box dans laquelle je voudrais afficher mon buffer (il recoit des données en boucle). Cependant il n'affiche les données de mon buffer qu'à la fin de la boucle et non durant toute la boucle. Si quelqu'un peut me debloquer..

    Merci.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    void CClientDlg::OnRecept() 
    {
         static char buffer[TAILLE]; 
        int test=0;
        int autori=0;
        char lettre=0;
        int i;
     
        SOCKET descripteur;
        sock(&descripteur);
     
        for(int j=0;j<20;j++) 
        {
            for (i=0;i<TAILLE-1;i++)
            {
                buffer[i]=lettre = reception(); 
     
            }
     
            buffer[i] = '\0';
     
            for (i=0;i<2;i++)
            reception();
     
            envoi(buffer,descripteur);
     
            ctrl_valeur.SetWindowText(buffer+1);
     
        }
     }

    Je début dans les MFC soyez indulgents :]

    Dans ClassWizard j'ai ajouté une variable de category Control de type CEdit
    La prochaine fois utilise la balise code ,Merci Farscape

  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,
    les boucles de traitement empêchent les messages Windows d'arriver aux fenêtres, ce qui donne l'impression d'une application figée car les fenêtres ne sont plus redessinées.
    voir faq:
    http://c.developpez.com/faq/vc/?page...rk#PumpMessage
    l'appel de cette fonction est a mettre dans la boucle pour laisser l'application se raffraichir.
    bon après je ne sais pas pourquoi tu fais buffer+1
    et le fait de faire SetWindowText tel quel écrase systématiquement le contenu de l'édit, tu en es conscient ?

  3. #3
    xyz
    xyz est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut
    D'accord merci pour cette réponse.

    je fais buffer+1 pour regarder un résultat en particulier.

    sinon y a t-il un autre moyen autre que SetWindowText pour afficher une valeur dans mon edit box ? Un autre type de fenêtre ?

    Je ne connais pas trop MFC et je connais pas du tout c++.
    Donc quand je vois la faq ca me parle moyen

    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
     
     
    /*static */void CMyApp ::PumpMessages() 
    { 
       // Handle dialog messages 
        MSG buffer; 
        while(PeekMessage(&buffer, NULL, 0, 0, PM_REMOVE)) 
        { 
            if (!AfxGetApp()->PreTranslateMessage(&buffer)) 
          { 
             ::TranslateMessage(&buffer); 
             ::DispatchMessage(&buffer); 
         }            
         AfxGetApp()->OnIdle(0);   // updates user interface 
        AfxGetApp()->OnIdle(1);   // frees temporary objects 
        } 
    }
    Je ne vois pas ou l'on définie la variable ctrl_valeur que j'ai rajouté sur mon IDC_EDIT2

  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
    Par défaut
    salut,
    vu que tu debutes je peux pas t'explique le code de la faq ..
    mais cette fonction permet de recevoir et dispatcher les messages windows a ton application:
    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
    30
    31
     
    void CClientDlg::OnRecept() 
    {
         static char buffer[TAILLE]; 
        int test=0;
        int autori=0;
        char lettre=0;
        int i;
     
        SOCKET descripteur;
        sock(&descripteur);
     
        for(int j=0;j<20;j++) 
        {
            for (i=0;i<TAILLE-1;i++)
            {
                buffer[i]=lettre = reception(); 
     
            }
     
            buffer[i] = '\0';
     
            for (i=0;i<2;i++)
            reception();
     
            envoi(buffer,descripteur);
     
            ctrl_valeur.SetWindowText(buffer+1);
            CMyApp ::PumpMessages();            
        }
     }
    la fonction peut etre static a ta classe d'application pour pouvoir etre appellée a tout endroit de ton programme ...

  5. #5
    xyz
    xyz est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut
    Ok merci pour ton aide je vais regarder tout ça

    Donc en faite mon constructeur, si j'ai compris, c'est ca

    CMyApp :umpMessages();

    ?

    Cependant à la compilation cette ligne pose problème ce qui me semble normal mais comment définir ceci correctement ?

    error C2653: 'CMyApp' : is not a class or namespace name
    error C2065: 'PumpMessages' : undeclared identifier

    Par ailleurs je me demandais quel est l'utilier de PumpMessages ?

    Le problème c'est que le message (mon buffer) n'est pas statique, il change en permance. En faite je viens lire la liaison série puis je stocke ces données dans un buffer où j'affiche les 8 1er octets puis je fais un \r\n pour faire un retour chariot pour écraser cette précédente donnée et réafficher la suivante. Je voulais donc afficher ceci dans mon Edit box pour que sous le même principe ca affiche les données les unes sur les autres. Un rafraichissement enf aite.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    il ne s'agit pas d'un constructeur, mais d'une facon de ne pas bloquer l'application (elle continue à recevoir des messages, notamment l'affichage).

    CMyapp est ici un exemple, il correspond à la classe d'application, chez toi elle a forcément un autre nom, proche du nom de l'appli, lorsque c'est généré par défaut

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

Discussions similaires

  1. Problème Programmation MFC
    Par xyz dans le forum Réseau
    Réponses: 3
    Dernier message: 13/05/2006, 14h36
  2. [Problème] Programme huit reines
    Par thegreatbato dans le forum C
    Réponses: 20
    Dernier message: 04/05/2006, 22h04
  3. Problème programmation : log
    Par rootsl dans le forum C
    Réponses: 4
    Dernier message: 29/03/2006, 11h26
  4. Probléme CFormview MFC
    Par denebj dans le forum MFC
    Réponses: 16
    Dernier message: 30/01/2006, 06h44
  5. Problème programmation objet
    Par Contrec dans le forum MFC
    Réponses: 54
    Dernier message: 30/03/2005, 11h30

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