OnDestroy et CDialog non modale... un peu d'aide svp ;-)

OnDestroy et CDialog non modale... un peu d'aide svp ;-) - C++ - Programmation

Marsh Posté le 08-09-2004 à 18:18:14    

Voilà, je travaille sur un projet que je "reprends" d'une personne précédente... J'arrive, je compile, j'execute et je quitte... PAF ! 3 pages de memory leaks détectés par VC++... Je viens de passer une journée à corriger.
 
Maintenant je m'attaque à la petite dizaine de warning de compilation qui subsistent... Dont un qui me pose un peu problème.
 
Voilà un bout de code exemple. CZoomDlg hérite de CDialog.
 

Code :
  1. //dans une fonction qcq...
  2. machin = new CZoomDlg;
  3. machin->ShowWindow(SW_SHOW);
  4. //dans le CZoomDlg::OnDestroy()
  5. CDialog::OnDestroy(); //je cite de mémoire, j'ai pas mon code sous la main là...
  6. delete this;


 
Tout le problème vient du "delete this" dans le OnDestroy de lui même... normalement il faudrait le faire depuis la classe qui l'a crée avec new (ou autre) mais là je vois pas où le placer vu que je suis pas en modal... et que donc je sais pas quand l'utilisateur ferme la fenêtre... et mettre un callback pour ça serait lourdingue non ?
 
Bon, ça doit être trivial pour les gurus du C++ alors je compte sur vous ;-)

Reply

Marsh Posté le 08-09-2004 à 18:18:14   

Reply

Marsh Posté le 08-09-2004 à 18:38:30    

Inutile de détruire l'objet dans le OnDestroy. Je suppose que ta Dialog doit avoir un bouton Cancel, donc dans le callback de celui ci, tu saisis :

Code :
  1. void CZoomDlg::OnCancel(void)
  2. {
  3.    DestroyWindow();
  4. }


Ce qui détruit physiquement la box, qui n'est plus présente en mémoire

Reply

Marsh Posté le 08-09-2004 à 18:51:55    

même si j'ai fait un new aileurs ?

Reply

Marsh Posté le 08-09-2004 à 21:51:53    

ben pourquoi tu fais un new ?
ça, ça marche très bien aussi :

Code :
  1. //dans le .h de la classe de ton appli
  2. private:
  3.    CZoomDlg machin;
  4. // signature du constructeur de la classe de ton appli
  5. CTonProgramme::CTonprogramme(void):machin()
  6. {
  7. // gnagna
  8. }
  9. // puis plus loin
  10. machin.ShowWindow(SW_SHOW);
  11. // et dans le code de ta CZoomDlg, tu ajoutes le code que je t'ai donné précédemment


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-09-2004 à 21:55:03    

je veux pouvoir instancier plusieurs fois Machin pour afficher plusieurs fois la même fenêtre avec un paramètre différent

Reply

Marsh Posté le 09-09-2004 à 07:36:17    

je vais tester aujourd'hui.... up préventif ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed