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 :

Comment recuperer une variable d'une autre boite de dialogue?


Sujet :

MFC

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut Comment recuperer une variable d'une autre boite de dialogue?
    Bonjour,

    J'ai actuellement deux boites de dialogues, j'ouvre une image dans la fenêtre principale et je voudrais récupérer le pointeur de l'image dans la deuxième afin de pouvoir faire des traitements.
    Mais je n'arrive pas à transmettre une variable d'une boite à l'autre.
    Les variables sont initialisées à la fermeture des fenêtres.
    Je pense que le problème est relativement simple, mais je ne trouve pas la solution.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Quelques informations qui pourront certainement aider à apporter une réponse : quel framework utilises-tu pour ton I.H.M. : MFC, Qt, wxWidgets ?
    Quelques éléments de conception peuvent aussi être utiles. As-tu un pattern M.V.C. ? Où sont tes variables ? Quelle classe a la responsabilité des pointeurs/handler de ton image ?
    Merci.

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    J'utilise les MFC sur Visual Studio 2008 et j'utilise openCv

    La classe de ma boite principale est Image ,celle de la deuxième est binarisation

    Tout d'abord j'aimerais récupérer une simple variable de la premiere boite dans la deuxième comme un CString.
    J'ai créé un bouton dans ma deuxième boite et je voudrais tout d'abord pouvoir récupéré le chemin d'accès de l'image qui est une variable membre de la première boite.

    voici le bouton de ma deuxième boite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void CBinarisation::OnBnClickedButtonClassique()
    {
     
    	CImage Image;
     
    	CString cheminImage=Image.mChemin;
    	MessageBox(test);
     
    	UpdateData(false);
    }
    La boite de dialogue s'affiche mais vide le chemin n'est pas recopié.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    J'imagine que tu dois avoir une classe CDlg1 et une classe CDlg2 ? Trivialement, tu as besoins que Dlg2 (par exemple) connaisse Dlg1 qui contient la donné à récupérer. Ensuite, tu utilises dans Dlg2 un accesseur pour récupérer la valeur. Mais, là il nous faudrait au moins la déclaration des 2 boîtes de dialogue.
    C'est une solution triviale mais pas très propre.

    Idéalement, CDlg1 et CDlg2 sont 'liées' à un 'Document' qui contient la valeur. Lorsque celle-ci est modifiée dans CDlg1, cette dernière met à jour le document et celui-ci notifie toutes les autres vues que le paramètre a changé. Ensuite, ces autres vues se mettent à jour avec le nouveau paramètre soit en le récupérant depuis le document soit parce qu'il a été fourni par la notification de mise à jour. Je te conseil de faire quelques recherches sur le pattern Modèle/Vue/Contrôleur ou le pattern Observer.

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Ma première boite s'appelle IDD = IDD_TRAITEMENTDEPHOTOS_DIALOG (classe Image)

    La deuxième s'appelle IDD = IDD_BINARISATION_DIALOG (classe Binarisation)

    J'ai déjà eu ce problème là mais je n'ai jamais réussi à le résoudre. Lors d'un ancien projet je stockais toutes mes variables sur des fichier txt, et je pouvais les utiliser comme je voulais mais cette méthode est assez contraignante.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Appeler une boîte de dialogue CImage me parait assez dangereux dans la mesure où il me semble qu'il existe déjà une classe de ce nom dans les MFC.
    Peux-tu nous poster les .h de tes 2 classes ?

  7. #7
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Commence par changer le nom de ta boite de dialog CImage
    Ensuite je vois que le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CBinarisation::OnBnClickedButtonClassique()
    {
     
    	CImage Image;
     
    	CString cheminImage=Image.mChemin;
    	MessageBox(test);
     
    	UpdateData(false);
    }
    est à revoir. Si Image est une instance d'une dialogue je ne vois ni de DoModal() ni de Create invoqué sur Image.

    Voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void CBinarisation::OnBnClickedButtonClassique()
    {
     
    	CImageDlg Image;
     
                 if(Image.DoModal() == IDOK)   // cette boite s'affiche et tu mets ton chemin
                 {
                         m_strCheminImage=Image.mChemin;  // tu stocke le chemin dans une donnée membre de CBinarisation qui est certainement mappé avec un de tes contrôles
    	}
     
    	UpdateData(false);
    }

  8. #8
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Désolé de ne pas avoir répondu avant.

    Le nom de la classe CImage est pas approprié mais c'était juste un nom que je lui est donné, ma vrai classe ne s'appelle pas comme ça.
    J'ai essayé ta méthode mais je n'arrive pas à récupéré la variable.
    Je voudrais récupérer la variable sans réouvrir la boite principale.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 463
    Par défaut
    Pensez au Design Pattern MVC, s'il vous plait merci.

Discussions similaires

  1. [Débutant] Affecter une variable d'une classe C# à une variable Javascript
    Par SultanGeek dans le forum C#
    Réponses: 0
    Dernier message: 20/06/2015, 20h42
  2. Recuperer le nom d'une variable dans une variable String
    Par aliwassem dans le forum Langage
    Réponses: 11
    Dernier message: 23/10/2009, 12h38
  3. Réponses: 2
    Dernier message: 28/11/2006, 15h20
  4. Comment recuperer la valeur d'une variable de session avec du javascript
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/09/2006, 10h40
  5. Réponses: 2
    Dernier message: 19/01/2006, 21h59

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