Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2939 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Problème Programmation MFC

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Problème Programmation MFC

n°1365418
Atlanted
Posté le 12-05-2006 à 19:17:00  profilanswer
 

Bonjour,
 
 
 
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  :
 
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


Message édité par Atlanted le 13-05-2006 à 20:04:43
mood
Publicité
Posté le 12-05-2006 à 19:17:00  profilanswer
 

n°1365486
_darkalt3_
Proctopathe
Posté le 12-05-2006 à 22:43:23  profilanswer
 

debug :o

n°1365487
_darkalt3_
Proctopathe
Posté le 12-05-2006 à 22:43:37  profilanswer
 

et balise [ code ] aussi :o

n°1365670
slash33
Posté le 13-05-2006 à 18:13:58  profilanswer
 

Le SetWindowText produit un message WM_PAINT qui est traité par l'application quand elle est libre. Or ici la boucle de traitement monopolise le temps processeur donc le contrôle à l'écran n'est mis à jour qu'à la fin de la méthode.
 
Une solution consiste à intercaller le code suivant après le SetWindowText:
 

Code :
  1. MSG msg;
  2. while(GetMessage(&msg,NULL,0,0))
  3. {
  4.   TranslateMessage(&msg);
  5.   DispatchMessage(&msg);
  6. }


 
Pour les détails : http://bob.developpez.com/tutapiwin/article_23.php

n°1365696
Atlanted
Posté le 13-05-2006 à 19:28:37  profilanswer
 

Merci pour cette réponse
 
tu me conseilles donc de faire ceci ?  
 

Code :
  1. ctrl_valeur.SetWindowText(buffer+1);
  2.  ctrl_valeur ctrl_valeur;
  3.  
  4.   while(GetMessage(&ctrl_valeur,NULL,0,0))
  5.  
  6.   {
  7.  
  8.    TranslateMessage(&ctrl_valeur);
  9.  
  10.    DispatchMessage(&ctrl_valeur);
  11.  
  12.   }
  13. }

Message cité 2 fois
Message édité par Atlanted le 13-05-2006 à 19:33:58
n°1365702
breizhbugs
Posté le 13-05-2006 à 19:47:24  profilanswer
 

Atlanted a écrit :


...
ctrl_valeur ctrl_valeur;
 while(GetMessage(&ctrl_valeur,NULL,0,0))
...
[/code]


Ouh la la mais ca vient faire quoi c'est "ctrl_valeur" la? t'as buggé ou quoi :lol:


Message édité par breizhbugs le 13-05-2006 à 19:48:06
n°1365703
Atlanted
Posté le 13-05-2006 à 19:50:11  profilanswer
 

MSG ctrl_valeur;
 
J'ai mis ca dans mon source :]
 
pas ctrl_valeur ctrl_valeur;

n°1365705
Atlanted
Posté le 13-05-2006 à 19:51:38  profilanswer
 

Parcontre ca m'affiche bien ce qu'il y dans buffer mais sans le "rafraichir". En faite buffer contient 8 octets qui sont écrasés sans arrêt pour afficher des valeurs en continue.

n°1365710
breizhbugs
Posté le 13-05-2006 à 19:58:19  profilanswer
 

Tu as deja un controle qui s'appelle "ctrl_valeur"!
EDIT: pour ta deuxieme remarque, c'est normal, car setwindowtext remplace ce qu'il y a dans le controle par ce que tu lui donne en parametres.


Message édité par breizhbugs le 13-05-2006 à 19:59:38
n°1365712
Atlanted
Posté le 13-05-2006 à 20:03:38  profilanswer
 

C'est bon j'ai réussi. Merci

mood
Publicité
Posté le 13-05-2006 à 20:03:38  profilanswer
 

n°1365818
slash33
Posté le 14-05-2006 à 10:21:15  profilanswer
 

Atlanted a écrit :

C'est bon j'ai réussi. Merci


On peut savoir comment STP ?

n°1365819
slash33
Posté le 14-05-2006 à 10:22:42  profilanswer
 

Atlanted a écrit :

tu me conseilles donc de faire ceci ?


Non. Certainement pas en remplaçant la structure MSG par un CEdit* : il y a aucune chance que ça compile.

n°1365824
Atlanted
Posté le 14-05-2006 à 10:49:15  profilanswer
 

Non mais je n'ai pas fais ça, maintenant ca marche.
 

Code :
  1. ctrl_valeur.SetWindowText(buffer+1);
  2.  CClientApp ::PumpMessages;
  3. {
  4.  MSG ctrl_valeur;
  5.  while(PeekMessage(&ctrl_valeur, NULL, 0, 0, PM_REMOVE))
  6.     {
  7.         if (!AfxGetApp()->PreTranslateMessage(&ctrl_valeur))
  8.       {
  9.          ::TranslateMessage(&ctrl_valeur);
  10.          ::DispatchMessage(&ctrl_valeur);
  11.  } 
  12.  AfxGetApp()->OnIdle(0);   // Rafraîchi l'interface utilisateur
  13.  AfxGetApp()->OnIdle(1);   // Libère temporairement l'objet
  14.     }
  15. }


 
et en rajoutant un static PumpMessages(); dans ma classe

n°1365828
slash33
Posté le 14-05-2006 à 11:01:16  profilanswer
 

Ah bon OK


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Problème Programmation MFC

 

Sujets relatifs
[JSP/DB2] Problème avec une requête d'insertion - Résolu[Résolu] [JAVA - RMI] Unsupported major.minor version 49.0
[Perl] telnet connexion!! (resolu)[Résolu] Lier un TextBox à un DataSet dans un TabControl
Asp, Vb et Access, Problème requête! A l'aideprobleme sur expression reguliere
Problème de pseudo frame chez OVH[Résolu] Obtenir date depuis date initiale
[JAVA] Pb de connexion DB Oracle à partir d'une applet [Résolu] 
Plus de sujets relatifs à : [Résolu] Problème Programmation MFC


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR