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 à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 16
    Points : 13
    Points
    13
    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 éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut

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

  3. #3
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    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 à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 16
    Points : 13
    Points
    13
    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