Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1338 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°845284
Kyle_Katar​n
Posté le 08-09-2004 à 18:18:14  profilanswer
 

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 ;-)

mood
Publicité
Posté le 08-09-2004 à 18:18:14  profilanswer
 

n°845299
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-09-2004 à 18:38:30  profilanswer
 

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

n°845307
Kyle_Katar​n
Posté le 08-09-2004 à 18:51:55  profilanswer
 

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

n°845415
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-09-2004 à 21:51:53  profilanswer
 

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)
n°845416
Kyle_Katar​n
Posté le 08-09-2004 à 21:55:03  profilanswer
 

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

n°845630
Kyle_Katar​n
Posté le 09-09-2004 à 07:36:17  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Aide siteaide svp : Jeux en réseaux !
Fenêtre modale, résultat, etc...aide requete sql pb syntaxe
novice en prog demande aideBesoin d'aide pour resoudre un bug d affichage xhtml/css
aide fonction qui appel l'événment OnActivate chaque 3 minutesBesoin d'aide php svp
a l'aide si quelqu'un connait trw2000a l'aide si quelqu'un connait trw2000
Plus de sujets relatifs à : OnDestroy et CDialog non modale... un peu d'aide svp ;-)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR