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 :

Lancement de plusieurs fenetres dans une application


Sujet :

MFC

  1. #1
    xr
    xr est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Lancement de plusieurs fenetres dans une application
    Bonjour,

    C'est un probleme elementaire mais je n'ai pas trouve d'informations dans l'aide ou sur le forum. J'ai une application qui gere plusieurs documents.

    J'ai cree une nouvelle classe CAnimationView derivee de CView. Et je voudrais lancer a partir d'un des items du menu, l'ouverture d'une nouvelle fenetre (de type CAnimationView). Cette fenetre ne doit pas etre independante, car j'ai besoin d'acceder aux donnees qui appartienent a la classe CAppliDoc.

    Avez vous des pistes a me proposer ?
    D'avance merci
    xavier

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 106
    Points : 113
    Points
    113
    Par défaut
    Salut,
    apparament tu utilises des MFC, télécharge donc ce tutorial.

    Il répondra à ta question ainsi qu'à ton autre post concernant la communication enter deux vues. Avant d'aller plus loin, tu dois absolument lire ce tutorial (ou un autre) comprendre en particulier la notion de Doc/Vue, c'est essentiel pour faire du code à peu prés propre.

    Bonne chance

  3. #3
    xr
    xr est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Suite
    Bonjour

    Dis moi si je me trompe, d'apres ce que j'en avais lu et compris, le Doc peut et doit contenir les données relatives a ton application. Le View peut te permettre d'afficher une partie ou la totalite des informations contenues dans le Doc.

    Jusqu'a present je n'ai eu besoin que d'une View. Si j'ai besoin d'une autre vue, affichant uniquement des schemas particuliers. Est ce possible ou bien y a un truc qui m'echappe ?

    Merci
    xavier

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Points : 165
    Points
    165
    Par défaut
    Dis moi si je me trompe, d'apres ce que j'en avais lu et compris, le Doc peut et doit contenir les données relatives a ton application. Le View peut te permettre d'afficher une partie ou la totalite des informations contenues dans le Doc.
    oui

    Jusqu'a present je n'ai eu besoin que d'une View. Si j'ai besoin d'une autre vue, affichant uniquement des schemas particuliers. Est ce possible ou bien y a un truc qui m'echappe ?
    oui enfin si j'ai bien compris ta phrase.

  5. #5
    xr
    xr est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Suite
    Salut

    D'accord avec tes reponses, ma question est alors :

    Tu fais comment pour lancer une nouvelle vue, qui est base sur le document Doc ?

    Merci
    xavier

  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
    salut,
    l'operation se fait a partir du document template:
    CDocTemplate::CreateNewFrame
    virtual CFrameWnd* CreateNewFrame( CDocument* pDoc, CFrameWnd* pOther );
    il faut fournir le document actif et la MDI en cours.

  7. #7
    xr
    xr est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Salut Farscape,

    Merci pour ces debuts d'informations, mais pour le debutant que je suis, j'ai un peu de mal a decoller.

    Quand tu parles de document templates, c'est une classe a part entiere qu'il faut creer.

    Dans mon cas, j'ai un MDI, avec CxxxDoc, CxxxView et CxxxApp, je dois rajouter quelque chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CDocTemplate::CreateNewFrame 
    virtual CFrameWnd* CreateNewFrame( CDocument* pDoc, CFrameWnd* pOther );
    II faut rajouter une nouvelle fonction membre ? CreateNewFrame et la declaration suivante correspond au codage de cette fonction?

    Merci si tu peux eclairer cet ocean d'ombre

    @+
    xavier

  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
    bonsoir ,
    dans InitInstance sur la declaration des documents template:
    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
     
    /*
    a declarer dans la classe app en tant que données membres
            CMultiDocTemplate* m_pNewDocTemplate;
    	CMultiDocTemplate* m_pFirstTemplate;
    */
    m_pFirstTemplate= new CMultiDocTemplate(
    		IDR_TESTMDTYPE,
    		RUNTIME_CLASS(CTestMdiDoc),
    		RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    		RUNTIME_CLASS(CTestMdiView));
    	AddDocTemplate(m_pFirstTemplate);
     
    	m_pNewDocTemplate=new CMultiDocTemplate(
    		IDR_TESTMDTYPE,
    		RUNTIME_CLASS(CTestMdiDoc),
    		RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    		RUNTIME_CLASS(CMyEditView));
    ici le premier document template classiquement une view avec addocTemplate.
    le deuxieme juste declaration du template sans faire addDocTemplate.
    pour rajouter un objet de la class CMyEditView par exemple dans le initialupdate de CTesMdiView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void CTestMdiView::OnInitialUpdate() 
    {
    	CView::OnInitialUpdate();
     
    	// TODO: Add your specialized code here and/or call the base class
    	CTestMdiApp *TheApp=(CTestMdiApp*)AfxGetApp();
    	CFrameWnd * pFrame =TheApp->m_pNewDocTemplate->CreateNewFrame(GetDocument(),GetParentFrame());
    	TheApp->m_pFirstTemplate->InitialUpdateFrame(pFrame,GetDocument()); 
    }
    etape:
    creation d'une Mdi a partir du 2 template.
    Rattacher la MDI avec sa fenetre CMyEditView au premier template avec InitialUpdateFrame.

    si je veux une 3 fenetre differente mais toujours sur le meme document il faudra faire comme pour le 2 template etc...
    au final un document avec plusieurs Fenetres...
    verifiable par exemple dans la 2 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
     
    void CMyEditView::OnInitialUpdate() 
    {
    	CEditView::OnInitialUpdate();
     
    	// TODO: Add your specialized code here and/or call the base class
    	POSITION pos=GetDocument()->GetFirstViewPosition();
    	CView *pView;
    	do
    	{
    		pView=GetDocument()->GetNextView(pos);
    	}
    	while(pView);
     
    }
    cette methode permet de gerer l'apparition de fenetres rattachees au meme document à la demande..
    d'echanger des données entre fenetres du meme document etc...
    Note:
    on n'est pas oblige de stocker des données communes dans le document

  9. #9
    xr
    xr est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Fin
    Salut Farscape,

    Merci infiniment pour les developpements que tu m'as fourni. Je vais tester tout cela

    @+
    xavier

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

Discussions similaires

  1. plusieurs Shell dans une application SWT/JFace
    Par Hypercube dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/03/2009, 15h23
  2. fermer une seule fenetre dans une application
    Par krikri1504 dans le forum Débuter
    Réponses: 3
    Dernier message: 24/01/2009, 15h34
  3. Réponses: 3
    Dernier message: 29/05/2007, 20h37
  4. Ouvrir plusieurs fenêtres dans une application
    Par okonkole dans le forum GTK+
    Réponses: 6
    Dernier message: 03/04/2007, 15h06
  5. Plusieurs langages dans une application ?
    Par kayzra dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 27/03/2007, 08h37

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