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 - passer un parametre à une fenetre fille


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut MDI - passer un parametre à une fenetre fille
    bonjour,

    je suis un peu débutant en VC++ MDI, et je rame la ...

    en fait, voici mon probleme
    dans ma fenetre CMainFrame (donc fenetre mère), j'execute du code. puis je lance une fenetre fille comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CReseauProjetApp  *)AfxGetApp())->NouvelleFenetre();
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void CReseauProjetApp::NouvelleFenetre()
    {
    	CWinApp::OnFileNew();
    }
    jusque la, tout marche bien ... la fenetre fille s'ouvre sans probleme.

    maintenant, mon probleme, c'est que je dois donner un parametre à la fenetre qui s'ouvre.

    deux possibilités:
    1. à partir de MainFrame, j'execute ce code trouvé sur la FAQ de ce site:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BOOL maximized;
    CMDIChildWnd* child =((CMDIFrameWnd *)AfxGetMainWnd())->MDIGetActive(&maximized);
    ensuite, je cast child en CReseauProjetView, et je lance une methode de cette classe ... malheureusement, ca marche pas.


    2. à partir du constructeur de CReseauProjetView, je récupere la fenetre mere en utilisant ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CMainFrame*)GetParent())->catalogChoisi
    ainsi normalement, je récupere un attribut de la classe CMainFrame.


    pour les deux possibilités, la compilation se passe bien, et c'est à l'execution que ca bug ca me prend trop la tete!! plsssssss heeeeelppp

    comment faire donc pour passer une instance de ma classe CCatalogue de ma classe CMainFrame à la classe CReseauProjetView dont l'instance est créée grace à CWinApp::OnFileNew()???

    merci pour votre aide

  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
    Par défaut
    salut
    tu ne peux caster la MDI en vue ,la MDI c'est le parent de la vue ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BOOL maximized;
    CMDIChildWnd* pChild =static_cast<CMDIFrameWnd *>(AfxGetMainWnd())->MDIGetActive(&maximized);
     
    CReseauProjetView *pView=static_cast<CReseauProjetView *>(pChild->GetActiveView());

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut


    toujours le meme type d'erreurs que quand je le castais tout simplement

    Compiling...
    MainFrm.cpp
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(187) : error C2440: 'static_cast' : cannot convert from 'class CView *' to 'class CReseauProjetView *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(188) : error C2027: use of undefined type 'CReseauProjetView'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(12) : see declaration of 'CReseauProjetView'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(188) : error C2227: left of '->OnChargerCatalog' must point to class/struct/union
    Error executing cl.exe.
    Creating browse info file...

    ReseauProjet.exe - 3 error(s), 0 warning(s)



    comment résoudre ca??

    et merci pour ta reponse

  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
    Par défaut
    tu es sur que CReseauProjetView est derivée d'une CView ou CFormView ?
    ou plutot tu n'as pas oublié de mettre le .h de la view dans le .cpp de la mainframe ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Citation Envoyé par farscape
    tu es sur que CReseauProjetView est derivée d'une CView ou CFormView ?
    ou plutot tu n'as pas oublié de mettre le .h de la view dans le .cpp de la mainframe ?
    quand meme

    quand je mets dans le mainfrm.cpp le #include "ReseauProjetView.h", ca crée des comflits avec les autres includes. alors ce que je fais, c'est qu'au lieu de mettre le #include, je fais juste une déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class CReseauProjetView;
    c'est alors qu'il reconnait la class CReseauProjetView, mais me donne ces erreurs


    edit: oui oui, c sur, CReseauProjetView derive d'une CView ...

  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
    Par défaut
    de toute façon ton pb viens de la ,il ne trouve pas la définition de ta classe
    d'ou l'erreur du static_cast..

    essaye de respecter l'odre d'inclusion des entetes dans la mainframe comme dans la view et ça doit passer.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    j'ai mis tous les ordres possibles ...rien ca passe pas ...

    voici les entetes:
    dans mainfrm.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "stdafx.h"
    #include "ReseauProjet.h"
    #include "DialogSelectServer.h"
    #include "Catalogue.h"
    #include "InterfaceComm.h"
    #include "ReseauProjetView.h"
     
    #include "MainFrm.h"
    dans le mainfrm.h :
    dans ReseauProjetView.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "stdafx.h"
    #include "ReseauProjet.h"
     
    #include "ReseauProjetDoc.h"
    #include "ReseauProjetView.h"
    #include "DialogSelectServer.h"
    #include "InterfaceComm.h"
    #include "FluxVideo.h"
    #include "MainFrm.h"
    dans le ReseauProjetView.h:
    quand je permute dans le mainFrm.cpp les deux includes suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "stdafx.h"
    #include "ReseauProjetView.h"
    soit ca me donne ca:

    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(186) : error C2065: 'CReseauProjetView' : undeclared identifier
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(186) : error C2065: 'pView' : undeclared identifier
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(186) : error C2061: syntax error : identifier 'CReseauProjetView'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(187) : error C2227: left of '->OnChargerCatalog' must point to class/struct/union


    ou ca:

    c:\program files\microsoft visual studio\myprojects\reseauprojet\reseauprojetview.h(22) : error C2143: syntax error : missing ';' before '*'
    c:\program files\microsoft visual studio\myprojects\reseauprojet\reseauprojetview.h(22) : error C2501: 'CReseauProjetDoc' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\myprojects\reseauprojet\reseauprojetview.h(22) : error C2501: 'GetDocument' : missing storage-class or type specifiers
    C:\Program Files\Microsoft Visual Studio\MyProjects\ReseauProjet\MainFrm.cpp(188) : error C2248: 'OnChargerCatalog' : cannot access protected member declared in class 'CReseauProjetView'
    c:\program files\microsoft visual studio\myprojects\reseauprojet\reseauprojetview.h(53) : see declaration of 'OnChargerCatalog'



    et une chose est sure, c'est que le CReseauProjetView marche tres bien, il ne contient pas d'erreurs.

    la je seche vraiment je comprends plus ...

  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
    Par défaut
    le stdafx.h doit etre toujours le premier include .
    tu arrives a compiler le source correspondant a ta classe d'application ?
    si oui reproduit le meme ordre des includes dans la classe mainframe.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

    tout ce que j'avais fait est en fait juste!!!! et j'ai perdu une journée sur une betise!!!! j'ai demandé à un prof, et sa reponse m'a fait maaaaal quand on include une view, il faut toujours faire un include de son doc correspondant
    et finalement ca marche!!
    c'est vraiment à se tirer une balle

    en tous cas, merci beaucoup à toi!!!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/01/2012, 17h56
  2. Creer une fenêtre fille
    Par sylsau dans le forum GLUT
    Réponses: 1
    Dernier message: 24/05/2006, 11h27
  3. [VB] Passer plusieurs parametres à une procedure stockée
    Par wolflinger dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/04/2005, 14h13
  4. [MFC] Maximiser à l'ouverture une fenetre fille !
    Par leskritiques dans le forum MFC
    Réponses: 15
    Dernier message: 28/04/2004, 08h50
  5. [MDI] Ouvrir immédiatement une fenetre fille
    Par phil56 dans le forum C++Builder
    Réponses: 8
    Dernier message: 12/03/2003, 14h27

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