sprechende Benennung
Nun gibt es in der User32.dll eine Funktion mit dem einladenden Namen CloseWindow. Also denke ich mir so, dass die wohl dafür gedacht ist, wenn man ein Fenster schließen will. Wäre ja irgendwie logisch. Aber nein, wenn man der CloseWindow-Funktion ein Fensterhandle reicht, dann minimiert die das Fenster nur. Naja, irgendwie so ganz offen ist das Fenster zwar nicht, aber naja. Also habe ich weitergesucht, und die martialisch klingende Funktion DestroyWindow gefunden. Wenn man mal von der Assoziation absieht, dass mein Programm dann mit einem Raketenwerfer das 'feindliche' Fenster bearbeitet, könnte man ja annehmen, dass nach der Zerstörung eines Fensters eben dieses weg wäre. Also habe ich auch das getestet, aber ohne jeglichen Erfolg. Das zu Testzwecken verwendete Notepad hat sich von den Angriffen gänzlich unbeeindruckt gezeigt.
Nach weiterer Recherche bin ich dann über ein Codebeispiel gestolpert, bei dem dem betreffenden Fenster eine Meldung WM_CLOSE geschickt wird, wonach sich das Fenster dann üblicherweise schließt. In der Dokumentation, die ich mir dann zu dem Thema noch verabreicht habe, stand dann noch, dass die Standardimplementation der Nachrichtenbehandlung nach Erhalt der WM_CLOSE-Meldung einen DestroyWindow-Aufruf absetzen würde. Hmm, okay, dann darf sich ein Programm wohl nur selbst wegbomben. Naja, solange es funktioniert.
Der testweise behandelte Editor hat sich dann auch brav beendet, und im Fall von ungespeicherten Eingaben den Nutzer mit einer Rückfrage auf den Umstand hingewiesen. Okay, works as planned. Dass sich hingegen ein bei weiteren Tests herangezogenes Explorerfenster gegenüber dem Schließungswunsch völlig verschließt, verwundert dann schon. Aber vielleicht wäre dort ja ein CloseWindow angemessener?
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt