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] echange de données entre dialog boxes(encore)


Sujet :

MFC

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut [MFC] echange de données entre dialog boxes(encore)
    Bonjour à tous,

    voilà, j'ai une dialogbox 'A' et un bouton 'Ab' sur cette dialog. Quand je clique sur Ab, je dois ouvrir une dialogbox 'B' en modal. B contiens une ListBox (en réalité, elle en contient plusieurs, mais une suffira pour mon problème) que l'on appelera Bl.

    Mon problème est le suivant: durant tout le déroulement de mon programme, A reçoit des données. Tout le temps, même si B est en modal par dessus elle. A doit traiter ces données, et en envoyer une partie à B pour mettre à jour Bl.

    Premier soucis: lorsque je fais un Bl.AddString(), si B n'est pas active, je me prends une assertion non gérée!! cette FAQ nous explique pourquoi, et nous donne un début de réponse (merci farscape )
    J'ai donc décidé d'utiliser une CStringList 'Bs', en membre public de B, que je remplis depuis A. Et quand j'arrive dans B.OnInitDialog(), je remplis Bl. Et là, j'arrive au

    Deuxième soucis: Bl est mise à jour à l'initialisation de B. Mais en fait, j'ai besoin qu'elle soit mise à jour dès que 'Bs' est modifiée. Qu'à cela ne tienne, j'ai donc décidé de créer une fonction membre publique de B qui modifie Bs, et je passe Bs en membre privée de B. Ainsi, à la fin de cette fonction, je fais un OnInitDialog(). Mais là, j'arrive au

    Troisième soucis: Catastrophe!! Il y a des moments ou Bs est mise à jour plusieurs fois par secondes!! Et là s'en est trop pour B, dont l'affichage perd le fil. Et le pire, c'est quand cette fonction est appelée alors que B n'est pas modale!!

    Enfin bref, je suis un peu perdu. J'espère que j'ai été suffisamment clair dans mes explications, et que vous pourrez ainsi me donner quelques conseils.

    Merci par avance.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    J’avoue que ton post m'a fait rigoler non pas pour me moquer, mais j'ai bien aimé la narration, le coté effet boule de neige.

    a part ça ,a quoi ça te sert d'avoir un CListbox dans Bs si elle est mise a jour plusieurs fois / sec ?
    c'est pour avoir une trace ?



  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par farscape
    salut,
    J’avoue que ton post m'a fait rigoler non pas pour me moquer, mais j'ai bien aimé la narration, le coté effet boule de neige.

    a part ça ,a quoi ça te sert d'avoir un CListbox dans Bs si elle est mise a jour plusieurs fois / sec ?
    c'est pour avoir une trace ?

    Non, c'est un peu compliqué à expliquer. Le problème vient initialement du fait que l'on devait, au départ, afficher notre logiciel sur 2 écrans et que maintenant, on n'en a plus qu'un.
    Je dois donc permettre à l'utilisateur de "switcher" entre 2 écrans qui affichent des informations différentes et qui doivent être à jour en temps réel. Tu vois ce que je veux dire?

    P.S: content que ça t'as fais rire, parce que de mon côté, je t'explique pas la prise de tête
    P.S.2: c'est ces moments là que je préfère dans le dev

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    Une autre question
    Les infos de cette listbox c'est une liste finie ? , c’est a dire 20 /30 lignes remplacées en temps réel ou mis a jour a la suite des existantes en permanence ?


  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    malheureusement non. Je ne sais pas à l'avance combien de lignes je vais devoir y afficher, ni leur contenu. Les données de ces listbox sont récupérées dans une bdd en fonctions d'informations récupérées sur le port série rs232.
    En revanche, je sais que le nombre de ligne à afficher restera raisonnable (disons 150 maximum) et je suis autorisé à formater leur contenu de façon à ce que chaque ligne ne dépasse pas un certain nombre de carractères.

    Précisions supplémentaires:
    J'utilise une dll qui lit ce qui arrive sur le port série et qui poste un message à destination de ma dialog box principale (A) quand des informations qui concernent mon appli sont disponibles. J'ai donc une fonction, dans ma dialog principale, qui intercepte ce message, qui va chercher les données dans le buffer du port série, et qui traite ces données. Ces données sont destinées soit à ma dialog A, soit à la B, mais pas au deux à la fois.
    L'utilisateur doit pouvoir passer d'une dialog à l'autre en cliquant sur un bouton. Chacune de ces 2 dialogs doit être à jour en temps réel.

  6. #6
    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
    re,
    tu peux essayer d'entourer ta maj de listbox par la fonction:
    SetRedraw(FALSE); pour desactiver la maj graphique.
    puis SetRedraw() pour la reactiver et enfin un invalidate() ,le tout sur la listbox bien sur .



  7. #7
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Bonne idée.
    Mais comment savoir si ma dialog est active? (je ne suis plus au bureau, je n'ai donc pas la msdn sous la main) Il doit y avoir une fonction du style IsWindowActive() certainement?

    Merci de t'être penché sur mon problème

  8. #8
    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
    je dirais comme ça par la fonction static de la classe CWnd : GetActiveWindow()


  9. #9
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ((CWnd*) this==GetActiveWindow())
    {
        malistbox.SetRedraw(TRUE);
        malistbox.Invalidate();
    }
    else
    {
       malistBox.SetRedraw(FALSE);
    }
    Quelque chose comme ça?:

  10. #10
    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
    oui ,a placer dans le contexte de la mise a jour bien sur .

  11. #11
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Je ne parviens pas à implémenter cette solution.

    1er problème:
    J'utilise une fonction init() qui me rempli ma listbox au démarrage de l'appli. Certaines lignes doivent, en effet, être insérées dès le début.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    voici ma fonction init:
    {
       malistbox.SetRedraw(FALSE);
       CString ligne=GetLigneAAjouter();
       while (ligne!="")
       {
          malistbox.AddString(ligne);
       }
    }
    Et bien j'obtiens une "asssertion failed" puisque malistbox ne semble pas initialisée (tous ces champs sont à 0x00000000). Pourtant, cette dernière est déclaré en tant que membre de ma dialog (dont la fonction init ci-dessus fait partie), et ce n'est pas un pointeur (elle est déclarée comme ça: CListBox malistbox Comme ça se fait?

  12. #12
    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
    et bien tu retombes dans le pb evoqué lors de ton premier message.
    la listbox n'est pas initialisée graphiquement...
    tu as implementé la methode de la faq pour pré remplir dans ce cas ?

  13. #13
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    tu veux dire en créant une classe hérité de CListBox et en utilisatant PreSubclassWindow() ?

  14. #14
    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
    oui et tout le reste aussi .
    sinon tu ne pourras preremplir ta listbox si elle n'est pas initialisée GDI...

  15. #15
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Bon ben ça y est, j'ai eu enfin le temps d'implémenter la solution que tu propose, et... ça marche presque :o)

    Encore quelques détails à régler, et c'est bon.
    farscape

  16. #16
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    ok c'est bon ça marche

    encore

  17. #17
    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

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

Discussions similaires

  1. [Tableaux] Echange de données entre JSP et PHP
    Par seb34 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 13h53
  2. message entre dialog box et thread
    Par scorbo dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2004, 11h01
  3. [MFC] Menu système d'un dialog box
    Par tonyskn dans le forum MFC
    Réponses: 2
    Dernier message: 24/05/2004, 21h50
  4. Telechargement d'internet et echange de données entre 2 pc
    Par Invité dans le forum Développement
    Réponses: 5
    Dernier message: 09/05/2004, 21h22
  5. [Kylix] Echange de données entre fiches
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 01/07/2003, 11h34

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