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] appel de la classe CFormView


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut [MFC] appel de la classe CFormView
    Bonjour,

    J'ai un projet MFC avec une classe CFormulaire de type CFormview (Formulaire.cpp), et dans cette classe, j'ai une fonction void Ajouter()

    Cette fonction ajoute des éléments dans une listbox et elle marche parfaitement lorsque je l'appelle directement dans Formulaire.cpp

    Mais j'ai besoin d'appeler cette fonction dans la classe CWinApp, pour cela j'ai essayé :

    CFormulaire* formu;
    formu->Ajouter();

    Mais ça ne marche pas, il y a une erreur lors de l'exécution.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Salut,
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CFormulaire* formu = new CFormulaire(); 
    if(formu)
        formu->Ajouter();

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    merci mais ça ne marche pas, j'avais déjà essayé et ça fait la même erreur quand j'exécute le prog.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Ton erreur se produit aussi en mode debug ?
    Si oui, est-ce que l'erreur se produit dans la fonction Ajouter ?
    quel est l'état de ta variable formu avant /pendant l'action Ajouter ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    J'ai essayé le mode débug (F5), j'ai aussi l'erreur.
    Je ne sais pas trop me servir de ce mode et je ne sais pas comment voir l'état de la variable formu.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    place ton curseur sur la ligne et appuie sur F9 (Breakpoint). Lance une session de debug (F5). Lorsque ton programme arrivera à ce point, il s'arrêtera.
    tu peux parcourir ton code pas à pas (F10) = ligne par ligne ; ou en 'step into' (F11) : tu rentres dans les fonctions que tu rencontres.
    De là, tu peux voir l'état de tes variables en les faisant glisser dans la partie 'watch' de ton débogueur.
    Avant de rentrer dans ta fonction Ajouter, regardes la valeur de ton pointeur formu et compare le à http://c.developpez.com/faq/vc/?page...gPointeurValue.
    tu y verra peut être ton erreur.
    Sinon, poursuis l'exécution dans ta fonction Ajouter (F11) et regarde pas à pas où est l'erreur.

    Une autre solution est d'exécuter ton programme en mode debug, et lorsque l'erreur est rencontrée, tu fais 'Recommencer' dans la boite de dialogie d'erreur pour deboguer le programme et tu regardes dans la pile où le programme s'est arrété.

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    ok, j'ai essayé de faire ce mode debug
    la valeur initiale de formu est 0x00335c38
    mais après, dans la fonction ajouter, il met " CXX0017: Error: cannot display value"
    je pense que c'est normal puisque formu est un objet de la classe CFormulaire qui contient elle même d'autre variables et fonctions.
    Bref, ça ne m'a pas trop avancé ...

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    le fait que l'adresse de formu soit différente des valeurs listées dans la FAQ montre que ta variable est surement bien initialisée.
    Une fois dans ta fonction Ajouter, il est normal que tu ne la voie plus ; l'objet que tu veux visualiser est 'this'. Donc dans la fenêtre de watch, tu rentres 'this' et tu devrais retrouver la même adresse qu'auparavant ! Tu pourras y suivre les modifications (éventuelles) de formu.

    Rencontres-tu l'erreur avant de sortir de la fonction Ajouter ? (est-ce que l'erreur est vraiment dans cette portion de code) ?

    Sinon, procède comme indiqué en seconde possibilité dans mon précédent post : regarde la pile au moment de l'erreur.

  9. #9
    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
    Pourquoi tu veux appler la méthode de la formview dans l'objet application. :

    Il est plus simple de faire l'inverse en appelant AfxGetApp() dans le formulaire.

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    Citation Envoyé par Gabrielly
    Pourquoi tu veux appler la méthode de la formview dans l'objet application. :

    Il est plus simple de faire l'inverse en appelant AfxGetApp() dans le formulaire.
    L'application ouvre un fichier texte puis l'affiche dans une listbox (la classe formulaire)
    c'est donc dans la fonction OnOpenFile() de l'application que j'appelle la méthode ajouter de la formview.

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    Citation Envoyé par Aymerik
    tu rentres 'this' et tu devrais retrouver la même adresse qu'auparavant ! Tu pourras y suivre les modifications (éventuelles) de formu.

    Rencontres-tu l'erreur avant de sortir de la fonction Ajouter ? (est-ce que l'erreur est vraiment dans cette portion de code) ?
    This a effectivement la même valeur que formu.
    Par contre l'erreur est bien dans cette fonction ajouter, lorsque je veux remplir la listbox, à cette ligne :
    m_Formulaire.AddString(str);

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    m_Formulaire est bien initialisé ?

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    Citation Envoyé par Aymerik
    m_Formulaire est bien initialisé ?
    oui, ça j'en suis sûr

  14. #14
    mat.M
    Invité(e)
    Par défaut Re: [MFC] appel de la classe CFormView
    Citation Envoyé par julien.nasser
    Mais j'ai besoin d'appeler cette fonction dans la classe CWinApp, pour cela j'ai essayé :
    .
    Erreur de programmation : on n'appelle jamais rien dans cette classe ; cette classe est une classe de base ..
    La plupart des classes héritent de cette classe mais on ne l'appelle jamais directement.
    trouver un bon tutoriel MFC...
    Si c'est une appli Doc/Vue comme cela semble être le cas , il faut presque toujours passer par la classe Document pour manipuler les données

  15. #15
    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
    Ecoute, si le contenu du fichier est mis dans un CString alors dans la méthode OnFileOpen() tu envoie un message à CFomView pour appeler sa méthode Ajouter() et tu recupère le CString du CWinApp

    Comment tu affiches ta Formview : : :

  16. #16
    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
    Je donne entière raison à mat.M

  17. #17
    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
    La classe document doit être au centre des échanges de données (surtout lorsqu'elles sont persistantes) entre l'objet application et les vues du documents.

    Cfr Modèle document-vue MFC

  18. #18
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    Citation Envoyé par Gabrielly
    Comment tu affiches ta Formview : : :
    Je l'affiche en appelant pDocTemplate->OpenDocumentFile(NULL);

    j'ai défini pDocTemplate comme cela :
    pDocTemplate=new CMultiDocTemplate(IDR_MAINFRAME,
    RUNTIME_CLASS(CNouveauDoc),
    // custom MDI child frame
    RUNTIME_CLASS(CChildFrame),
    RUNTIME_CLASS(CFormulaire));
    AddDocTemplate(pDocTemplate);

  19. #19
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut Re: [MFC] appel de la classe CFormView
    Citation Envoyé par mat.M
    Erreur de programmation : on n'appelle jamais rien dans cette classe ; cette classe est une classe de base ..
    J'ai essayé de créer un autre projet en manipulant toutes les données à partir de CmonappliDoc.cpp, mais quand j'appelle la fonction OnFileOpen(), rien ne se passe. Apparemment cette méthode ne fonctionne que dans la classe de l'application CWinApp.

    De plus, j'ai essayé de garder le OnFileOpen dans CWinApp et d'appeler la FormView par l'intermédiaire de CmonappliDoc.cpp, ça ne marche pas non plus, ça refait la même erreur. Donc je ne pense pas que l'erreur vienne de là.

Discussions similaires

  1. Réponses: 13
    Dernier message: 02/02/2005, 00h21
  2. [MFC] Créer dynamiquement une classe
    Par vanitom dans le forum MFC
    Réponses: 9
    Dernier message: 11/12/2004, 13h23
  3. [MFC] appeler OnRButtonUp de la vue parente
    Par barthelv dans le forum MFC
    Réponses: 4
    Dernier message: 15/07/2004, 16h08
  4. [PL/SQL]Appel d'une classe/méthode java
    Par marsup54 dans le forum SQL
    Réponses: 4
    Dernier message: 30/06/2004, 16h44
  5. [MFC] Appel d'une dialog
    Par mac07 dans le forum MFC
    Réponses: 6
    Dernier message: 23/12/2003, 17h52

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