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] detruire une fenetre lors de son initialisation ...


Sujet :

MFC

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 115
    Points : 98
    Points
    98
    Par défaut [MFC] detruire une fenetre lors de son initialisation ...
    Bonjour
    je cherche a detruire une fenetre dans l'initDialog, mais le programme me renvoi une memory leack.
    Y aurai t il un moyen de contourner ce probleme ?
    Avez vous des idées pour me sortir de cette galere.
    merci
    @+++

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut comment tu fait pour la detruire ?
    si c'est un fenetre allouee dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pWnd->DestroyWindow();
    delete pWnd;
    soit plus precis sur le contexte .

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 115
    Points : 98
    Points
    98
    Par défaut
    Bonjour
    dans la premiere fenetre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void CEssaiWindowDlg::OnOK() 
    {
    	CWnd * pWnd;
    	pWnd = new CDialog2;
    	pWnd->Create(_T("STATIC"),"IDD_DIALOG2",WS_VISIBLE,CRect(0, 0, 100, 100),this,NULL);
    	CDialog::OnOK();
    }
    et dans le initDialog de IDD_DIALOG2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BOOL CDialog2::OnInitDialog()
    {
    	CDialog::OnInitDialog();
                    SetIcon(m_hIcon, TRUE);
    	SetIcon(m_hIcon, FALSE);
    	this->DestroyWindow();
    	delete (this);
    	return TRUE;  
    }
    voila comment je fait, et dans ce cas la, j'ai toujours une fuite sur le new ...
    des idées ?
    merci bcp
    @+++

  4. #4
    mat.M
    Invité(e)
    Par défaut
    this->DestroyWindow();
    delete (this);
    Non !!! placer l'instruction dans la méthode OnDestroy plutôt que dans OnInitDialog !!

    Que veux-tu faire exactement ?
    Tout cela semble compliqué ; j'ai un exemple pour afficher des dialog modeless et avec communications de messages

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    quand tu fais une allocation dynamique il faut stocker le pointeur en tant que donnee membre et faire delete sur le destructeur de la classe .
    sinon fuite memoire l'objet windows est bien detruit par la classe parent mais le new fait la classe pwnd couic !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CEssaiWindowDlg::~CEssaiWindowDlg()
    {
       if(m_pWnd ) delete   m_pWnd ;
    }
    void CEssaiWindowDlg::OnOK()
    {
     
      m_pWnd = new CDialog2; 
    }

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    et comme le fait remarquer Mat.M la sequence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BOOL CDialog2::OnInitDialog()
    {
       CDialog::OnInitDialog();
                    SetIcon(m_hIcon, TRUE);
       SetIcon(m_hIcon, FALSE);
       this->DestroyWindow();
       delete (this);
       return TRUE; 
    }
    est un peu bizarre tu te coupes l'herbe sous le pied ?

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 115
    Points : 98
    Points
    98
    Par défaut
    salut
    en fait, il manque des bouts, mais en gros :
    s'il se presente un autre message, on ne doit pas afficher un ecran mais un autre, et le test se fait dans ne fonction qui est appelé dans le InitDialog en fait.
    enfin, c'etais pour savoir si quelqu'un avais deja fait....
    c'est pas grave
    @+++

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2009, 17h54
  2. Initialiser une dialogBox lors de son premier lancement
    Par NeqO55 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/02/2009, 10h40
  3. [MFC]Cacher une fenetre
    Par 0xYg3n3 dans le forum MFC
    Réponses: 6
    Dernier message: 29/04/2005, 17h13
  4. [MFC] Reduire une fenetre
    Par 0xYg3n3 dans le forum MFC
    Réponses: 3
    Dernier message: 29/04/2005, 11h55
  5. Réponses: 3
    Dernier message: 03/02/2004, 17h34

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