WM_DESTROY auslösen
-
aber man kann WM_CLOSE senden, was dann zwangsläufig auch ein WM_DESTROY auslöst
nur wenn man WM_CLOSE mit return FALSE beendet.
MSDN schrieb:
An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message and calling the DestroyWindow function only if the user confirms the choice.
-
Martin Richter schrieb:
Nein! Kann man nicht! WM_DESTROY ist eine Notification wie WM_SETFOCUS und man kann sie eben nicht selbst versenden!
Weiss nicht, mein Vorschlag ist vielleicht nicht schön. Ich kriege aber mit dem Senden von WM_DESTROY sowohl eigene als auch fremde Prozesse abgeschossen! Eine Unterscheidung der Nachrichten WM_XXXX ist mir nicht bekannt. Ich benutze diesen Weg, um z.B. die Anzahl der Instanzen eines Programmes einzuschränken. Es läuft doch wunderbar.
Und wenn etwas läuft, kann man es auch benutzen, denke ich. 
-
*auf Martins Smackdown wartend*
-
kann ja sein, dass es läuft, es ist aber nicht dokumentiert! Außerdem warum sollte man soetwas machen, wenn man einfach DestroyWindow, welches für diesen Zweck gedacht ist, aufrufen kann.
-
berniebutt schrieb:
Es läuft doch wunderbar.
Und wenn etwas läuft, kann man es auch benutzen, denke ich. 
Du schaltest Deinen Rechner auch aus, indem Du den Stecker ziehst?
DestroyWindow ist notwendig. Man zerstört eben nicht alles mit SendMessage(...,WM_DESTROY;...! Und in den meisten Fällen wird in der Kette nur PostQuitMessage ausgelöst was den Prozess terminiert, und dazu habe ich ja schon in meinem Blog geschrieben.
Die korrekte Folge von Nachrichten, die alles auch freigeben wird dadurch nicht ausgelöst.Warum denkst Du denn das DestroyWindow als Funktion vorhanden ist? Als Shortcut für SendMessage(...,WM_DESTROY,...)?
Es gibt Unsitten im Netz, die irgendjemand angefangen hat und die weil sie funktionieren wie das Steckerziehen einfach kommentarlos übernommen werden...
Ich werde wohl mal wieder einen Artikel über eine weitere Unsitte posten
-
Martin Richter schrieb:
Ich werde wohl mal wieder einen Artikel über eine weitere Unsitte posten

Genau das habe ich befürchtet *zitter*
Nun, auf gehts, wir müssen den Martin Richter bei seinem Vorhaben anfeuern
Martin (kann nix für daß ich auch so heiße... )
-
Mmacher schrieb:
Martin (kann nix für daß ich auch so heiße... )
Vielleicht sollte ich den Namen schützen lassen...
zumindest hier im Forum...
-
O.K. Wenn es für etwas eine WinApi-Funktion gibt, dann sollte man sie auch einsetzen. Da Windows selbst von Nachrichten regen Gebrauch macht, kann man dieses starke Instrument auch nutzen. Man sollte dann aber wissen, was man tut und was Windows damit macht. Meinetwegen Unsinn. Doch viele Dinge sind einfach auf unterschiedliche Weise möglich. Ich denke zum Thema: daddeldu!

Grüss Dich Martin. Wir kennen Dich. Deinen Namen schützen brauchst Du nicht.
-
berniebutt schrieb:
O.K. Wenn es für etwas eine WinApi-Funktion gibt, dann sollte man sie auch einsetzen. Da Windows selbst von Nachrichten regen Gebrauch macht, kann man dieses starke Instrument auch nutzen.
Nochmal:
Windows macht keinen Gebrauch von dieser Nachricht im Sinne von "Fenster zerstören"!
Windows sendet dise Nachricht als Notification an das Fenster!
Wenn in Windows ein Fenster zersört werden soll wird DestroyWindow verwendet.Es gibt Nachrichten die sind nun mal Notifications: WM_SETFOCUS, WM_PAINT, WM_NC.., WM_DESTROY etc. Diese Nachrichten kann man nicht slebser senden ohne in gewisser Weise Unfug zu betreiben.
Leider haben die Windows Designer in Windows 3.0 bereits den Fehler gemacht dies nicht eindeutig zu trennen und dieser Designfehler ist beibehalten worden.
-
berniebutt schrieb:
Da Windows selbst von Nachrichten regen Gebrauch macht, kann man dieses starke Instrument auch nutzen.
Au weia, das ist aber ein wirklich böser Satz. Jedenfalls im Sinne von Martin Richter, Stichwort "Die Unsitte Windows-Nachrichten ...."

Warum? Ich behaupte mal, viele Windows-Programmierer (ok, sagen wir mal die, die erst max. 1..2 Jahre Erfahrung gesammelt haben) wissen nicht, daß auf ein WM_CLOSE normalerweise ein WM_NCCLOSE folgt, bevor überhaupt WM_DESTROY zum Zuge kommt.
Das hängt u.a. damit zusammen, daß erst mal das Hauptfenster ihre Child-Windows schließen/zerstören soll bevor Windows den Non-Client-Bereich des Fensters zerstören darf.Ähnliches kann man auch zum Thema WM_QUIT schreiben, dafür gibts analog die Funktion PostQuitMessage(). Denn WM_QUIT wird intern etwas anders gehandhabt als die meisten anderen Nachrichten.
Deshalb mein Einwurf zum o.g. Satz.
Aber in einem Punkt gebe ich Dir vollkommen recht: Man hätte die Nachrichten besser gruppieren sollen, was man gefahrlos senden darf, und welche besondere nachrichten sind. Auch mir ging es damals so "Nachricht ist doch gleich Nachricht, oder nicht?"
Aber andererseits, dafür sind ja diese Funktionen da!
Martin
-
Bin ich jetz ein "Sittenstrolch", weil ich gelegentlich "unsittsames" mache und das auch noch hier im Forum öffentlich verbreite? Gut, ich habe begriffen oder bestätigt bekommen, dass der Entwurf von Windows und der WinApi an manchen Stellen unschlüssig ist. Aber das war bei MS noch nie anders.
Danke allen. Ich bin und bleibe lernwillig.