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 :

Questions à propos de la destruction des fenêtres


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 301
    Billets dans le blog
    2
    Par défaut Questions à propos de la destruction des fenêtres
    Bonjour à tous,

    j'ai actuellement quelques soucis avec la destruction des fenêtres de mon appli (quand on clique sur la petite croix p. ex.) , et je me rends compte que certaines choses m'échappent. C'est pourquoi je m'en remet à vous:

    * Ma fenête hérite de CChildFrame. Elle contient une CView, qui contient elle-même des controles divers et variés. Lorsque je la ferme, ça plante dans CView:: PostNcDestroy().
    * Le destructeur de la frame n'est pas appelé, mais celui de la view oui. Comment se fais-ce? Qui appelle ces destructeurs?
    * Dois-je intercepter le WM_ON_DESTROY? Si oui, que dois-je faire dedans?
    * Comment sont détruits les objets GDI? Comment s'assurer qu'ils sont bien détruits?

    Merci d'avance pour les multiples réponses que vous aller me donner

  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,
    la question initiale c'est pourquoi ça plante...
    et qu'est ce qui plante ?

  3. #3
    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
    je complète : la fenêtre détruit sa partie graphique sur la destruction de l'objet.
    Donc dans le cas des contrôles quand la donnée membre est détruite.
    pour les contrôles non associé à une variable un message est envoyé
    sur la destruction de la fenêtre mère.

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 301
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par farscape
    salut,
    la question initiale c'est pourquoi ça plante...
    et qu'est ce qui plante ?
    Alors, ça plante quand je ferme la fenêtre (frame). Je ne sais pas exactement où (code asm) mais la dernier méthode "accessible" dans la call stack est CView:: PostNcDestroy().
    Quand ça plante, j'ai un message "user breakpoint called", et si je continue (F5), je reçoit le sympathique petit message:
    Citation Envoyé par ce fourbe
    Program: D:\path\monprog.exe
    File: dbgheap.c
    Line: 1044

    Expression: _CrtIsValidHeapPointer(pUserData)
    Je suis en debug, sous VC6 ( ) et je dois partir très vite donc si tu me réponds, je ne pourrais lire la réponse que demain

    Merci et bonne soirée.

  5. #5
    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
    dbgheap est un problème de débordement mémoire quelque part sur un pointeur
    ....
    En gros tu as une utilisation illicite qui corrompt la mémoire..

  6. #6
    mat.M
    Invité(e)
    Par défaut
    Les objets alloués sont désalloués avec la classe de Document.
    C'est ça la philosophie MFC .
    Je ne comprends pas pourquoi tu fais hériter des objets de CChildFrame.
    Une classe CView est toujours associée à une CDocument ...

    Citation Envoyé par r0d
    * Comment sont détruits les objets GDI? Comment s'assurer qu'ils sont bien détruits?
    ?? Les objets GDI sont , en général , crées lorsque tu dessine avec OnDraw et désalloués immédiatement après.
    S'ils sont membres de la CView et persistants durant l'existence de la classe il faut les effacer au destructeur de la CView


    Je te conseille le livre de M$ Press "Atelier Visual C++" ou "Programming the MFC" de Jeff Prosise

  7. #7
    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
    pour les objets GDI si ils sont utilisés à travers une classe MFC ;il y a destruction de la partie GDI sur la destruction de l'objet.

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 301
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mat.M
    Je ne comprends pas pourquoi tu fais hériter des objets de CChildFrame.
    Alors en fait voilà: j'ai une application de type MDI avec ma mainframe. Moi je veux créer une nouvelle fenêtre, qui est constituée ainsi:
    - la frame, qui hérite de CChildFrame, qui contient:
    - une dialog bar (qui contient, elle aussi, tout un tas de contrôles)
    - une view, qui hérite de cdxCDynamicFormView (cf codeproject)
    Ma frame hérite de CChildFrame car elle hérite d'une classe particulière à l'appli sur laquelle je travaille, et je n'ai pas vraiment le choix en fait.
    Ma frame est créée ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMDIChildWnd* pWnd = m_pMainFrame->CreateNewChild(RUNTIME_CLASS(CMaFrame), IDR_MON_ICONE);
    Citation Envoyé par mat.M
    Une classe CView est toujours associée à une CDocument ...
    Bah oui mais le problème c'est que je n'ai pas besoin de CDocument.

    Citation Envoyé par mat.M
    Je te conseille le livre de M$ Press "Atelier Visual C++" ou "Programming the MFC" de Jeff Prosise
    Oui, je crois que j'en ai bien besoin... je vais les commander de ce pas

  9. #9
    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 n'as pas besoin de CDocument ok, le framework oui alors laisse le fonctionnement par defaut en donnant la classe CDocument .
    comme je l'ai déjà dit on n'est pas obligé d'utiliser les fonctionnalités du document openfile etc...

  10. #10
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 301
    Billets dans le blog
    2
    Par défaut
    D'accord, mais j'en fais quoi de mon CDocument? Quand je créé ma fenêtre (CreateNewChild), il ne me demande pas de CDocument. Et puis ma fenêtre fonctionne bien (à part ce plantage à la fermeture)

  11. #11
    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
    voir faq:http://c.developpez.com/faq/vc/?page...ltiDocTemplate


    tu definis ton document template et tu l'appelles par OpenDocumentFile(NULL...


Discussions similaires

  1. question à propos des containeurs
    Par bountykiller dans le forum C++
    Réponses: 4
    Dernier message: 02/10/2005, 13h21
  2. Question à propos des états
    Par rangernoir dans le forum IHM
    Réponses: 4
    Dernier message: 30/09/2005, 14h38
  3. Question à propos des compilateurs
    Par elf dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 20/07/2005, 17h00
  4. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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