Originalgröße u. -Position von maximiertem Fenster

RedWraith

Mitglied
Hallo !

Ich möchte folgendes erreichen. Gibt es eine Möglichkeit, bei einem maximierten Fenster die Originalgröße und -position, also die im nicht-maximierten Zustand abzufragen ?

Ein Beispiel:
Auf meinem Monitor mit der Auflösung 1280x1024 habe ich ein .net Programm laufen, dessen Größe und Position folgendermaßen ausschaut:
Code:
.top=100
.left=100
.width=800
.height=640

Maximiere ich das Fenster jetzt ändern sich diese Daten auf folgendes ab:
Code:
.top=-8
.left=-8
.width=1296
.height=1010

Wenn ich das Fenster jetzt wieder de-minimisiere (geiles Wort :D), kehrt das Fenster wieder zu dem Zustand vor der Maximierung zurück. Das heißt, irgendwo muss das Fenster diese Werte aufbewahren.

Kann mir jemand sagen, wie ich bei einem maximierten Fenster diese Werte in Erfahrung bringen kann, bevor das Programm wieder normalisiert wird ?

Ich hätte Interesse an einem Weg innerhalb der .NET Klassenstruktur und einen über das Windows Nachrichtensystem (WM_GETSIZE oder so).
 
Habe mal kurz im Internet gesucht, aber leider nichts gefunden.
Am einfachsten ist es natürlich sich eigene Variablen dafür anzulegen, in denen du im SizeChanged-Event die neue Größe speicherst, wenn der Fenster-Zustand nicht maximiert und nicht minimiert ist.
Warum willst du diese Werte überhaupt wissen?
 
Ich muss aus einem Programm heraus ein anderes Programm schließen und anschließend wiederherstellen um eine Ressource, die sonst von eben diesem Programm blockiert wird kurzzeitig frei zu bekommen.

Wenn das Programm vor dem Schließen maximiert war, geschlossen und wieder geöffnet wird und man es dann wieder de-maximiert, dann bleibt das Fenster so groß wie der gesamte Bildschirm.

Ich werd einfach die Fenstergröße auf ein Viertel des Bildschirms oder so setzen. Es war jetzt keine kritische Sache, es war halt etwas, was mich ein wenig gewurmt hat :)
 
Ich muss aus einem Programm heraus ein anderes Programm schließen und anschließend wiederherstellen
Kannst du nicht vor dem Schließen ermitteln ob maxmiert oder nicht und wenn nicht die Position und Größe holen? Dann hst du doch alle Informationen, um das Programm wieder entsprechend herzustellen.

Gruß
MCoder
 
Nicht so ohne weiteres. Ich wollte folgendes Verhalten unterbinden:

Programm vor dem Schließen/Wiederherstellen:
Das Programm ist maximiert und hat als Fenstergröße 1280x1024. Würde ich das Fenster nun normalisieren, dann würde sich die Fenstergröße auf z. bsp. 640x480 verringern.

Jetzt schließe ich das Programm und stelle es wieder her:
Das Programm ist maximiert und hat als Fenstergröße 1280x1024. Würde ich das Fenster nun normalisieren, dann würde die Fenstergröße auf 1280x1024 bleiben, weil die Größe-wenn-nicht-maximiert beim Schließen und Wiederherstellen verloren geht (Weil ich sie nicht auslesen kann).
 
Ah, jetzt verstehe ich; habe vorher nicht gründlich genug gelesen.

Vielleicht wäre es möglich, das andere Programm (wenn maximiert) vor dem Schließen erst zu normalisieren und davaon die Größe abzugreifen. Beim Wiederherstellen wird es erst normalisiert angezeigt und bei Bedarf danach
maximiert.

Gruß
MCoder
 
Du weist der Size einen neuen Wert zu, der als Ausgangswert für FormWindowState.Normal gilt.
Ist dieser nun gleich groß wie FormWindowState.Maximized tja.. dann wird sich nix ändern.
Denn die FormWindowState.Normal ist bei öffnen eines WinForm-Programms jene Größe die du als *ausgangswert* definiert hast (meist in der Entwicklungsumgebung ;-) )
Das heisst deine FormWindowsState.Normal = definierter ausgangswert.
Das heisst auch wenn du dein Programm schließt und wieder öffnest ist der ausgangswert wieder als FormWindowsState.Normal definiert. Vorrausgesetzt du überschreibst ihn vor dem neuerlichen *öffnen* nicht.
Am einfachsten wäre es du speicherst den FormWindowsState beim schließen des Programms (z.b: in einer Xml - Datei) und beim öffnen liest du diesen wieder aus und weist es dem Programm zu.
Du könntest auch den FormWindowState und die Size abspeichern. Mehr als miximieren und minimieren geht eh nicht also bräuchtest du nur dann die Size zuordnen wenn dein Programm FormWindowsState.Normal aufweist und die Size in diesem Status vom Benutzer geändert worden wäre. (dann ändert sich nämlich auch die Ausgangsgröße..) Wenn er natürlich die Size jetzt so weit auseinanderzieht das sie gleich der FormWindowState.Maximum Size wäre is es natürlich ähm blöd ;-).

Das ganze könntest du im SizeChanged Event behandeln und bei OnClosing speichern

Ich hoffe ich hab das einigermaßen verständlich formuliert ;-)
 
Zurück