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 :

La fonction DestroyWindow plante !!!


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 16
    Par défaut La fonction DestroyWindow plante !!!
    Hello

    Dans un programme, j'ai crée une classe dérivée de CWnd. Cette classe fonctionne parfaitement, jusqu'au moment où je quitte le programme. A ce moment, j'obtient un message de type "Debug assertion failed", en provenance de la ligne 1002 du fichier wincore.cpp, ce qui correspond à une ligne de la fonction DestroyWindow.

    Ma classe contient un contrôle enfant, dérivé de la classe CListBox, et initialisé comme suit dans la fonction OnCreate:
    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
    if ( !m_List.Create ( WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | LBS_DISABLENOSCROLL | LBS_NOTIFY, CRect( 0, 0, 0, 0 ),  this,  IDC_OUTPUTVIEW_LIST ) )
    {
          TRACE0("Failed to create view for the CListBox in ZVOutputView\n");
          return -1;
    }
     
    // Get the log font.
    NONCLIENTMETRICS ncm;
    ncm.cbSize = sizeof( NONCLIENTMETRICS );
     
    VERIFY( ::SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &ncm, 0 ) );
     
    m_Font.CreateFontIndirect( &ncm.lfMessageFont );
    m_List.SetFont( &m_Font );
    m_List.SetHorizontalExtent( 2000 );
    En plaçant un point d'arrêt dans la fonction DestroyWindow, j'ai pu constater que l'objet enfant n'était pas détruit lors de l'appel à cette fonction.

    Est-ce pour cette raison que DestroyWindow plante quand il tente de détruire l'objet parent ? Si oui, comment dois-je utiliser le contrôle enfant pour qu'il fonctionne correctement ? Si non, quelqu'un connaît-il la raison pour laquelle la ligne 1002 de wincore me renvoie une erreur ?

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut

    C'est des MFC : je déplace vers le forum VC++.

  3. #3
    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
    Tu peux montrer cette ligne 1002 de wincore.Cpp
    Faudrait-il pas redéfinir la fonction DestroyWindow pour ta classe dérivée de CWnd et appelé DestroyWindow pour ta listbox?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 16
    Par défaut
    Voici la ligne 1002 de wincore, mais je pense pas que ça pourra aider beaucoup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef _DEBUG
    	ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);
    #endif
    Quand aux fonctions dérivées, ça n'y change rien : Apparamment, la fonction de base est quand même appelée lorsque l'objet est détruit...

Discussions similaires

  1. La fonction Pos() plante. Question de longueur.
    Par bvsud dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2011, 16h52
  2. fonction qui plante
    Par étoile de mer dans le forum Débuter
    Réponses: 3
    Dernier message: 19/09/2008, 09h42
  3. Fonction recursive plante session
    Par cyberyan dans le forum PL/SQL
    Réponses: 4
    Dernier message: 28/08/2008, 14h57
  4. fonction qui plante mon programme
    Par étoile de mer dans le forum Débuter
    Réponses: 21
    Dernier message: 22/08/2008, 15h08
  5. [Système] Pourquoi la fonction ini_get plante ?
    Par renaudjuif dans le forum Langage
    Réponses: 14
    Dernier message: 02/08/2006, 00h17

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