Fensterposition und -größe bei zwei Monitoren speichern
-
Hi,
als ich über mögliche Bugs in meiner endlich (fast?) fertigen Gui nachgedacht habe, ist mir folgendes Problem durch den Kopf gegangen.
Wenn man zwei (oder mehr) Monitore benutzt (im Erweiterungsmodus) wird das von den MFC (z. B. GetWindowRect(...)) als ein Monitor mit größerer Fläche gesehen.
Wenn ich jetzt das Fenster auf den zweiten Monitor verschiebe und die Anwendung beende, wird diese Position gespeichert. Schalte ich den zweiten Monitor ab, oder stecke ihn aus, dann ist wahrscheinlich meine Anwendung weg?
Leider habe ich z. Z. nicht die Möglichkeit das auszuprobieren, da ich nur einen Monitor habe.
Wenn meine Vermutung zutrifft, dann suche ich nach einer Lösung die aktuelle Anzahl von Monitoren zu ermitteln und eine Möglichkeit zur Überprüfung ob die letze Einstellung wiederhergestellt werden kann.
Danke und Lg
Kerberos
-
Ich denke Du musst einfach verifizieren ob die Koordinaten die Du verwendest auch gültig sind. Esbraucht doch nur eine andere Auflösung eingestellt werden und Dein Fenster verschwindet auch...
Um eine Plausibilitätsprüfung kommst Du nicht drum herum.
-
kerberos schrieb:
Wenn meine Vermutung zutrifft, dann suche ich nach einer Lösung die aktuelle Anzahl von Monitoren zu ermitteln und eine Möglichkeit zur Überprüfung ob die letze Einstellung wiederhergestellt werden kann.
Achtung! Die Anzahl der ermittelten Monitore ist nicht unbedingt gleich der Anzahl der tatsächlich eingeschalteten Monitore!
Nur mal so als Hinweis,
Martin
-
Hi,
danke für eure Antworten!
Esbraucht doch nur eine andere Auflösung eingestellt werden und Dein Fenster verschwindet auch...
Also IMHO verschiebt Windows alle Fenster in den sichtbaren Bereich, wenn man die Auflösung ändert.
Um eine Plausibilitätsprüfung kommst Du nicht drum herum.
Also einfach wie folgt die aktuelle Bildschirmauflösung ermitteln und prüfen ob das Hauptfenster innerhalb dieses Bereichs liegt
int iWidth = GetSystemMetrics(SM_CXSCREEN); int iHeight = GetSystemMetrics(SM_CYSCREEN);
Achtung! Die Anzahl der ermittelten Monitore ist nicht unbedingt gleich der Anzahl der tatsächlich eingeschalteten Monitore!
Mit dem o. g Code bekomme ich die Fläche aller aktiven Monitore, oder nur die des Hauptmonitors? (Hab momentan leider keine Möglichkeit dies zu prüfen)
Lg
Kerberos
-
MonitorFromWindow
http://msdn.microsoft.com/en-us/library/ms534601(VS.85).aspx
GetMonitorInfo
http://msdn.microsoft.com/en-us/library/ms534599.aspxHatten wir gerade erst:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-225895-and-highlight-is-monitorfromwindow.html
-
Hi,
ich bin gerade auf die glorreiche Idee gekommen meinen Monitor an meinen Laptop anzuschließen um das Ganze zu testen.
Also entweder übersehe ich etwas, oder man muss das überhauptnichts implementieren. Beim Schließen des Fensters speichere ich ein WINDOWPLACEMENT und beim Start der Anwendung lade ich dieses wieder.
Wenn ich jetzt ein Fenster auf den zweiten Monitor schiebe, die Anwendung beende, den Monitor deaktiviere und die Anwendung starte wird die Anwendung (nicht wie von mir vermutet) auf dem ersten Monitor verschoben und angezeigt.Habe ich eine Fehlermöglichkeit übersehen?
Lg Kerberos
-
War das Fenster auf dem zweiten Monitor maximiert?
Wenn ja, dann erscheint bei deaktiviertem Monitor das Fenster natürlich auf dem Laptop auch maximiert.
Denn die Struktur WINDOWPLACEMENT behinhaltet auch die Info, ob das Fenster maximiert ist, unabhängig von den tatsächlichen Positionskoordinaten.Habs nicht nachgeprüft, aber dies könnte der Fall gewesen sein...
Martin
-
Wenn Du Fensterkoordinatn übergibst, dann sollten die plausbel sein!
Manchmal machen das die Api Funktionen für Dich. In diesem Fall lohnt sich einfach das Lesen der Doku:
SetWindowPlacement
http://msdn.microsoft.com/en-us/library/ms633544(VS.85).aspxIf the information specified in WINDOWPLACEMENT would result in a window that is completely off the screen, the system will automatically adjust the coordinates so that the window is visible, taking into account changes in screen resolution and multiple monitor configuration.
MoveWindow und CreateWindow machen solche Plausis nicht
-
Hi,
Ok, vielen Dank. Das hilft mir weiter!
Lg
Kerberos