Warning: calling DestroyWindow
-
Was mache ich falsch bzw. was habe ich vergessen wenn ich diesen Fehler bzw. diese Warnung in der Ausgabe angezeigt bekomme nach beenden meines Programmes?
Warning: calling DestroyWindow in CDialog::~CDialog -- OnDestroy or PostNcDestroy in derived class will not be called.
-
Das Objekt wird zerstört, obwohl das Fenster noch vorhanden ist.
Beispielsweise ist hier ein Objekt für einen nicht modalen Dialog auf dem Stack angelegt und der Dialog wird erzeugt und der Skope verlassen.
-
Ok aber was muss ich dann anders machen. Rufe zuerst
m_myDialog->DestroyWindow();
und danach
delete m_myDialog;
-
Beides korrekt. In diesem Fall dürfte für dieses Objekt, der ASSERT nicht kommen.
Setze einen Breakpoint auf die Trace Ausgabe. Sie findet sich IMHO im Wincore in den MFC Soucen. Dann kanst Du sehen um welches Objekt es sich handelt.
Evtl. hast Du andere Objekte erzeugt, die Du nicht zerstörst.
-
Hallo,
die Empfehlung in diesem Falle ist (nach TN017: Destroying Window Objects), PostNcDestroy in der abgeleiteten Klasse (hier der Klasse von m_myDialog ) zu überschreiben, und dann
delete this;
in dieser PostNcDestroy-Methode auszuführen (zuerst DestroyWindow auszuführen, ist korrekt).
MfG,
Probe-Nutzer
-
delete this; habe ich aufgerufen allerdings in meiner Dialog Klasse in der Funktion OnDestroy(); ist das auch ok?
-
y-vonne schrieb:
delete this; habe ich aufgerufen allerdings in meiner Dialog Klasse in der Funktion OnDestroy(); ist das auch ok?
Nein!
Korrekt ist es wie Probe-Nutzer schreibt:
Mach es in der PsotNcDesroy Funktion.
-
Ok. Ich habe 4 Dialoge. Habe nun in jeder Klasse die Funktion PostNcDestroy überschrieben. Und delete this implementiert. Wenn ich nun vom ersten Dialog DestroyWindow aufrufe werden von allen Klassen die PostNcDestroy Methode ausgeführt. Wieso das denn?
-
Weil der eine Dialog evtl. im Kontext des anderen liegt?
- oder anders-
D.h. die Dialoge jeweils Member des anderen Dialogs?
-
Weil der eine Dialog evtl. im Kontext des anderen liegt?
Inwiefern. Eigentlich nicht habe jeden für sich angelegt. Es herschen auch keine Verbidnungen untereinander.