Fensterposition und Windows Einrastfunktion

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Fensterposition und Windows Einrastfunktion

Beitrag von DePe »

Ich speichere bei meinem Programm die Fensterposition, -größe und Zustand (Min/Max). Dafür verwende ich die API-Funktionen Get/SetWindowPlacement_(). Wenn man aber ein Fenster mit den 'Einrastfunktionen' von Windows vergrößert, z.B. Windows-Taste + Cursor Links, sind die ermittelten Werte, die Werte vor dem Einrasten. Ist irgendwie logisch, da das Fenster ja auch wieder in der ursprünglichen Größe wiederhergestellt werden kann.

Kann man die eingerastete Fensterposition und -größe ermitteln?

Peter

Edit: Also mit den PB WindowX/Y/Width/Height-Funktionen funktioniert es schon, aber diese Werte stimmen nicht ganz, darum verwende ich die API-Funktionen.

Mit WindowX(#Window, #PB_Window_FrameCoordinate) bekomme ich 5, obwohl das Fenster ganz links am Bildschirmrand steht. Mit SetWindowPlacement_() bekomme ich 0, bei Windows 10 ist es -6, wegen den Fensterschatten, aber das kann ich berücksichtigen bzw. berechnen mit DwmGetWindowAttribute.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: Fensterposition und Windows Einrastfunktion

Beitrag von DePe »

Mit GetWindowRect_() bekomme ich die richtigen Werte. Ich muss noch nachlesen bzw. testen ob die Werte auch für SetWindowPlacement_() verwendet werden können. Manche Funktionen verwenden unterschiedliche Referenzpunkte, wie z.B. SetWindowPos und SetWindowPlacement.

Peter
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: Fensterposition und Windows Einrastfunktion

Beitrag von DePe »

Ich habe jetzt alles auf PureBasic-Funktionen umgestellt, und es funktioniert auch beinahe alles richtig. Bei mehreren Monitoren mit unterschiedlicher Skalierung, stimmt die Berechnung nicht bei der Überprüfung ob ein Fenster noch sichtbar ist. Es wird immer die Skalierung vom Hauptmonitor verwendet.
Wenn man in PureBasic noch die Desktop-Funktionen wie DesktopUnscaled() usw. für alle vorhandenen Monitore verwenden könnte, wäre es beinahe perfekt.

Keine weiteren Fragen, hat sich (fast) alles erledigt.

Peter
Antworten