DestroyWindow()



  • Hi,
    eine kurze Frage: Muß ich bei einem DestroyWindow() das Fenster vorher mit ShowWindow(hwnd,SW_HIDE) unsichtbar machen?

    Oder kümmert sich DestroyWindow() auch darum, daß das Fenster unsichtbar wird? In allen Windows-Versionen (Win95 und WinNT bis heute)?

    Ich stelle nur deswegen diese Frage hier ins Forum, da ich in der MSDN nirgendwo gelesen habe, daß sich DestroyWindow() ausdrücklich darum kümmert (Stichwort: Zukunftssicherheit).

    Gruß
    Martin



  • DestroyWindow() macht das Fenster wie gesagt kaputt.
    Und schonmal nen kaputtes Fenster gesehen? 😉



  • gosha16 schrieb:

    DestroyWindow() macht das Fenster wie gesagt kaputt.
    Und schonmal nen kaputtes Fenster gesehen? 😉

    Nee, das nicht 🙄

    Meine scheinbar triviale Frage ist natürlich ernstgemeint.

    Will eigentlich nur wissen: Kann ich mich darauf verlassen, daß DestroyWindow() auch dafür sorgt, daß z.B. die Bereiche hinter dem zu "zerstörenden" Fenster invalid markiert werden und entsprechende WM_PAINT-Messages an die verbleibenden Fenster gesendet werden?

    Wenn ja, wo steht das geschrieben?
    In den MSDN-Dokus ist kein Wort über diese Annahme zu finden.

    Man kann auch vom gegenteiligen Ansatz her so fragen: Wird von einem Programmierer erwartet, daß er vor DestroyWindow() immer ShowWindow(hwnd,SW_HIDE) aufrufen muß?

    Meine Tests ergaben, daß man ShowWindow(hwnd,SW_HIDE) einfach weglassen kann.
    NUR: Funktioniert das auch in den nächsten Windows-Versionen sicher?

    Martin



  • Da DestroyWindow() das gesamte Fenster entfernt, werden die Fenster die vorher ganz oder teilweise verdeckt waren falls nötig natürlich von Windows neu gezeichnet.

    Je nach Fenstertyp sendet Windows dabei allerdings nicht zwangsweise ein WM_PAINT oder invalidiert das Fenster. (z.B. bei WS_EX_LAYERED oder WS_EX_COMPOSITED Fenstern passiert das in der Regel nicht - Den Fensterinhalt speichert Windows selbst zwischen)



  • Danke für Deine Info geeky,

    werde bei DestroyWindow() zukünftig das ShowWindow(hwnd,SW_HIDE) weglassen, da offensichtlich überflüssig.

    Greets
    Martin


Anmelden zum Antworten