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
@+++
Version imprimable
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
@+++
salut comment tu fait pour la detruire ?
si c'est un fenetre allouee dynamiquement :
soit plus precis sur le contexte .Code:
1
2
3 pWnd->DestroyWindow(); delete pWnd;
:D
Bonjour
dans la premiere fenetre :
et dans le initDialog de IDD_DIALOG2 :Code:
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(); }
voila comment je fait, et dans ce cas la, j'ai toujours une fuite sur le new ...Code:
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; }
des idées ?
merci bcp
@+++
Non !!! placer l'instruction dans la méthode OnDestroy plutôt que dans OnInitDialog !!Citation:
this->DestroyWindow();
delete (this);
Que veux-tu faire exactement ?
Tout cela semble compliqué ; j'ai un exemple pour afficher des dialog modeless et avec communications de messages
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 !
:DCode:
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; }
et comme le fait remarquer Mat.M la sequence :
est un peu bizarre tu te coupes l'herbe sous le pied ?Code:
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; }
:D
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
@+++