Fenster zerstören



  • Also ich habe eine von CFrameWnd abgeleitete Klasse.
    Hier fange ich die WM_DESTROY ab für Aufräumarbeiten

    Eine Instanz dieser Klasse is Membervariable in einem Dialog.
    Der tut in der InitDialog das Fenster anlegen (mit create) und anzeigen.

    Soar wenn ich die Dialoganwendung schließe, ruft der anscheinend nicht die Destroy-Methode von allein auf(Breakpoint in der OnDestroy wird nicht durchlaufen).

    Soar da hab ich nun im Dialog auf die WM_DESTROY aufgerufen um dort dann meine CFrameWnd zu zerstören.
    Rufe ich da nun das DestroyWindow auf, geht er erstmal nicht in die OnDestroy, im Gegenteil ich krieg dann nene Fehler im core.

    Soar wie ist nun due korrekte Reihenfolge, um so selbst erstelle Fenster wieder korrekt freizugeben ohne MemLeaks.

    Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called.

    Und das kommt halt, wenn nix mach und mich nur auf den Destruktor von CWnd verlasse.
    Wäre echt net, wenn mir einer verrät. wo ich da was dann genau aufrufen muss, ohne MemLeakso der Assertions zu kriegen



  • fang mal WM_CLOSE ab



  • ESS_CB schrieb:

    fang mal WM_CLOSE ab

    Wo?

    Wenn ich im Dialog die WM_CLOSE abfange und dort das Fenster zerstöre, passiert dasselbe.
    Ach ja der Nutzer kann das Fenster nicht schließen, nur den Dialog. Dieser soll dann halt das Fenster korrekt freigeben.
    Muss doch Leute geben, die sowas schon gemacht haben ?!?!



  • Pellaeon schrieb:

    ESS_CB schrieb:

    fang mal WM_CLOSE ab

    Ach ja der Nutzer kann das Fenster nicht schließen, nur den Dialog.

    hast du als Style NOCLOSE, oder wie?

    versuch mal das: beim schließen des Dialogs entfernst du erstmal das NOCLOSE und dann schickst du dem FEnser WM_CLOSE, dann müsste es sich von allein schließen.



  • Ja dann geht er trotzdem nicht in meine OnDestroy. Kann doch net sein.
    An welcher Stelle darf ich denn nun DestroyWindow aufrufen und unter welchen Voraussetzungen?



  • *push* muss doch Leute geben, die das wissen 🙂



  • schreib doch einfach den wichtigen Code von der Destroy in die Close!!!!!!



  • Sorry falsch gelesen das war nichts.



  • ESS_CB schrieb:

    schreib doch einfach den wichtigen Code von der Destroy in die Close!!!!!!

    Ja ok Notlösung

    Trotzdem wüsst ich gern, wie das geht mit der DestroyWindow und warum da die Fehlermeldung kommt 🙂



  • leite einfach eine Klasse von CStone ab. Mit der MemberFunktion Throw() kommst du dann an dein Event DestroyWindow... 😃 😉 😃

    P.S. Nicht böse sein liebe Admins, bei so viele Ernsthaftigkeit, bleibt der Spaß manchmal auf der Strecke... 😉



  • ^^

    ich glaube nur nicht, dass ihm das weiter hilft. @Paeleon wieso willst du das unbedinkt wissen? So geht es doch auch....


Anmelden zum Antworten