Alle Child Windows fragen ob es für sie OK wäre geschlossen zu werden



  • Gibt es eine (einfache) Möglichkeit mit der MFC alle Child-Windows, speziell auch modale Dialoge die gerade mit DoModal() offen sind, zu fragen, ob es für sie OK wäre wenn sie jetzt geschlossen werden?

    Grund: Wenn man im Task-Manager im Applications Tab auf "End Task" klickt, dann bekommt das Top-Level Window ein WM_CLOSE geschickt.
    Manchmal möchte das aber ein Child-Window oder ein Modaler Dialog verhindern.

    Muss man sich da selbst was stricken (d.h. z.B. alle Child-Windows enumerieren, dynamic_cast auf eine IQueryClose Interface-Klasse, und dann halt nachfragen), oder bietet die MFC etwas was man dazu verwenden könnte?


  • Mod

    Nein. Da bietet die MFC nichts spezielles an.
    Aber es kann sowieso nur immer einen modalen Dialog geben und das entsprechende aktive Top-Level Window lässt sich ermitteln.

    Dein Problem werden eher modale Dialoge des Systems sein. Datei öffnen, Messagebox etc.

    Ansonsten sorgt die View-Doc-Frame Architektur für die korrekte Behandlung von WM_CLOSE. Insofern versehe ich nicht was ein Child Window gegen einen Close haben kann.



  • Das ist ne Dialog-Anwendung.
    Und es gibt bestimmte Dialoge, die machen was wo es gut wäre auf die Beendigung zu warten.

    Und es kann natürlich beliebig viele modale Dialoge geben. Pack mal ein DoModal in eine OnTimer Funktion.
    (Nicht dass ich das machen würde, aber die ein modaler Dialog ist eben kein Highlander, und sich darauf zu verlassen dass es nur einen gibt wäre daher einfach falsch.)


  • Mod

    Einfach Toplevel Fenster bestimmen und WM_CLOSE senden. Im Normalfall löst das ein ID_CANCEL (EndDialog) aus.



  • Hab' ich probiert - also einfach keinen speziellen Handler für WM_CLOSE.
    Der Dialog wird dann aber einfach eiskalt zerstört (WM_DESTROY), ohne irgendwas vorher.
    Und gegen WM_DESTROY kann man sich net wehren (was ja auch gut so ist).


Anmelden zum Antworten