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 :

MDI interaction entre plusieurs vues


Sujet :

MFC

  1. #21
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    bonjour,
    encore merci de m'avoir répondu

    ça à l'air de marcher, je connaissais pas cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class CReseauxCAN;
    Dans quel cas l'utilise t-on?

    Enfin, pourquoi maintenir un CReseauxCAN *m_Reseaux; dans CInterfaceCAN? Lorsque il faut accéder à cette instance, le faire dynamiquement (comme fait dans CInterfaceCAN::OnInitialUpdate):

    Dans quel cas utilise t-on alors un CReseauxCAN *m_Reseaux?
    Quels sont les differences entre les 2
    avantages et inconvenient

    merci encore et surtout à 3DARCHI car tu a pris le temps de répondre à tous les messages que j'ai poster qui on permis de me faire avancer dans mon projet

  2. #22
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Salut,
    encore un autre probléme:
    En fait j'aimerais envoyer un valeur d'une variable d'une fenetre à une autre fenetre:
    donc je fais tout d'abord la creation de la fenetre dans une fenetre:
    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
     
    void CInterfaceCAN::OnInitialUpdate() 
    {
    	CFormView::OnInitialUpdate();
     
     
    	TailleMDI();
    	TheApp=(CROBOTApp*)AfxGetApp();
        pFrame=TheApp->pDocTemplate2->CreateNewFrame(GetDocument(),GetParentFrame());
        TheApp->pDocTemplate->InitialUpdateFrame(pFrame,GetDocument(),0); 
     
     
       POSITION pos=GetDocument()->GetFirstViewPosition();
       CView *pView;
       do
       {
              pView=GetDocument()->GetNextView(pos);
    		   if(pView && pView->IsKindOf(RUNTIME_CLASS(CReseauxCAN))) m_Reseaux=static_cast<CReseauxCAN *>(pView);
       }
       while(pView);
    ensuite je rédupere la valeur que je veux grace à un pointeur de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    void CInterfaceCAN::OnButtonConfigCAN() 
    {
    int hello =5;
    CReseauxCAN*m_Reseaux=(CReseauxCAN*)hello;}
    mais maintenant comment je fait pour l'utiliser (recuperer cette valeur) dans mon autre fenetre?
    car il ne connais pas ce pointeur.

    merci d'avance
    et désolé d'insster toujour s sur le même sujet mais le multifenetrage je n'arrive pas encore à manier.

    merci d'avance

  3. #23
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    bonjour,

    Enfin j'ai compris comment interargir entre 2 fenetres de classe CView ou dérivées.
    Petit résumé, vous me corriger si je me trompe;

    Premierement,
    Creer les dossier pour chaque fenetres en supprimant pour les autres dossier la fonction (voir la F.A.Q de farscape http://cpp.developpez.com/faq/vc/?pa...OnSameDocument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     pDocTemplate = new CMultiDocTemplate(
    		IDR_ROBOTTYPE,
    		RUNTIME_CLASS(CROBOTDoc),
    		RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    		RUNTIME_CLASS(CInterfaceCAN));
    	AddDocTemplate(pDocTemplate);
     
    	pDocTemplate2 = new CMultiDocTemplate(
    	IDR_ROBOTTYPE,
    	RUNTIME_CLASS(CROBOTDoc),
    	RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    	RUNTIME_CLASS(CReseauxCAN));
    // pas de AddocTemplate.
    Ensuite je creer la 2 émes fenetres dans la premiere fenetre:
    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
     
    void CInterfaceCAN::OnInitialUpdate() 
    {
    	CFormView::OnInitialUpdate();
     
    	TheApp=(CROBOTApp*)AfxGetApp();
        pFrame=TheApp->pDocTemplate2->CreateNewFrame(GetDocument(),GetParentFrame());
        TheApp->pDocTemplate->InitialUpdateFrame(pFrame,GetDocument(),1); 
     
     
     
       POSITION pos=GetDocument()->GetFirstViewPosition();
      // CView *pView;
       do
       {
              pView=GetDocument()->GetNextView(pos);
    		   if(pView && pView->IsKindOf(RUNTIME_CLASS(CReseauxCAN))) m_Reseaux=static_cast<CReseauxCAN *>(pView);
       }
       while(pView);
     
     
    }
    Une fois ces étapes fait, je communique entre les 2 fenetres via le document:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void CInterfaceCAN::OnButtonConfigCAN() 
    {
                    CROBOTDoc *pDoc = (CROBOTDoc *)GetDocument();
    		pDoc->hello = "Bonjoour";
    		//mise a jour des controles de la view.
    		UpdateData(TRUE);		
    		pDoc->UpdateAllViews(NULL)	;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void CReseauxCAN::OnButtondemarrer() 
    {
    	CROBOTDoc* pDoc= (CROBOTDoc*)GetDocument() ;
    	ASSERT_VALID(pDoc);
    	// TODO: add draw code for native data here
    	SetDlgItemText(IDC_EDIT1,pDoc->hello);
     
    }
    Et ça marche comme je le souhiatais.

    Merci à tous pour l'aide apporté ça faisait quelque mois que je galérais

  4. #24
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par parain3874 Voir le message
    ça à l'air de marcher, je connaissais pas cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class CReseauxCAN;
    Dans quel cas l'utilise t-on?
    Ca permet de prototyper la classe. On indique au compilateur que CReseauxCAN est un type qui sera défini. On l'utilise quand le compilateur n'a pas besoin de savoir autre chose que: c'est un type. Donc, lorsqu'on veut déclarer un pointeur ou une référence.
    Valide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class CReseauxCAN;
    class Blabla
    {
    CReseauxCAN *m_pReseau;
    //ou
    CReseauxCAN &m_rResau;
    };
    Pas valide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class CReseauxCAN;
    class Blabla
    {
    CReseauxCAN m_oReseau;
    };
    Ici le compilateur doit complètement connaître CReseauxCAN pour construire Blabla.

    Citation Envoyé par parain3874 Voir le message
    Enfin, pourquoi maintenir un CReseauxCAN *m_Reseaux; dans CInterfaceCAN? Lorsque il faut accéder à cette instance, le faire dynamiquement (comme fait dans CInterfaceCAN::OnInitialUpdate):

    Dans quel cas utilise t-on alors un CReseauxCAN *m_Reseaux?
    Quels sont les differences entre les 2
    avantages et inconvenient
    Disons qu'il n'y a pas de règle définie. Dans ton cas, CReseauxCAN est déjà une view de ton document. Donc, l'association entre ton documents et tes différentes views existe déjà dans les MFC. La ligne CReseauxCAN *m_Reseaux devient redondante. Et qui dit redondance dit risque d'incohérence. Car, il y a peut être un cas où m_Reseaux est fermé et détruite sans que ta classe ne soit prévenue --> Donc ton pointeur sera invalide. L'obtenir en parcourant les vues du document t'assure que tu auras toujours un pointeur valide tant que la vue existera. Tu laisses aux MFC le soin de rester cohérente.

  5. #25
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par parain3874 Voir le message
    bonjour,

    Enfin j'ai compris comment interargir entre 2 fenetres de classe CView ou dérivées.
    Petit résumé, vous me corriger si je me trompe;

    Premierement,
    Creer les dossier pour chaque fenetres en supprimant pour les autres dossier la fonction (voir la F.A.Q de farscape http://cpp.developpez.com/faq/vc/?pa...OnSameDocument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     pDocTemplate = new CMultiDocTemplate(
    		IDR_ROBOTTYPE,
    		RUNTIME_CLASS(CROBOTDoc),
    		RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    		RUNTIME_CLASS(CInterfaceCAN));
    	AddDocTemplate(pDocTemplate);
     
    	pDocTemplate2 = new CMultiDocTemplate(
    	IDR_ROBOTTYPE,
    	RUNTIME_CLASS(CROBOTDoc),
    	RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    	RUNTIME_CLASS(CReseauxCAN));
    // pas de AddocTemplate.
    Ensuite je creer la 2 émes fenetres dans la premiere fenetre:
    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
     
    void CInterfaceCAN::OnInitialUpdate() 
    {
    	CFormView::OnInitialUpdate();
     
    	TheApp=(CROBOTApp*)AfxGetApp();
        pFrame=TheApp->pDocTemplate2->CreateNewFrame(GetDocument(),GetParentFrame());
        TheApp->pDocTemplate->InitialUpdateFrame(pFrame,GetDocument(),1); 
     
     
     
       POSITION pos=GetDocument()->GetFirstViewPosition();
      // CView *pView;
       do
       {
              pView=GetDocument()->GetNextView(pos);
    		   if(pView && pView->IsKindOf(RUNTIME_CLASS(CReseauxCAN))) m_Reseaux=static_cast<CReseauxCAN *>(pView);
       }
       while(pView);
     
     
    }
    Une fois ces étapes fait, je communique entre les 2 fenetres via le document:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void CInterfaceCAN::OnButtonConfigCAN() 
    {
                    CROBOTDoc *pDoc = (CROBOTDoc *)GetDocument();
    		pDoc->hello = "Bonjoour";
    		//mise a jour des controles de la view.
    		UpdateData(TRUE);		
    		pDoc->UpdateAllViews(NULL)	;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void CReseauxCAN::OnButtondemarrer() 
    {
    	CROBOTDoc* pDoc= (CROBOTDoc*)GetDocument() ;
    	ASSERT_VALID(pDoc);
    	// TODO: add draw code for native data here
    	SetDlgItemText(IDC_EDIT1,pDoc->hello);
     
    }
    Et ça marche comme je le souhiatais.

    Merci à tous pour l'aide apporté ça faisait quelque mois que je galérais
    C'est ça!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [RCP] Evénements de selection entre plusieurs vues
    Par stadou dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 29/01/2009, 16h30
  2. jointure entre plusieurs vues
    Par oxilab dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/12/2007, 19h04
  3. [RCP] interaction entre les vues
    Par stachus dans le forum Eclipse Platform
    Réponses: 7
    Dernier message: 14/09/2007, 15h01
  4. interaction entre plusieur script python par le biai d'internet
    Par yggdrazil dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 01/11/2006, 14h36
  5. [RCP] Interaction entre les vues
    Par MarneusCalgarXP dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 10/10/2006, 22h52

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