vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
Warum liefert GetWindowRect falsche Daten? 
Autor: schmidt34
Datum: 14.01.16 18:23

Ich habe die API-Funktion GetWindowRect eingesetzt. Irgendwie sind die gelieferten Werte nicht schlüssig, es kommt zu großen (nicht nachvollziehbaren) Problemen bei der Weiterverarbeitung. Alle Probleme liegen IMMER im Bereich 1 bis 2 Pixel.

Right + Bottom sind um 1 Pixel zu groß, und auch bei voll geöffnetem Fenster ohne Rahmen (ohne PopUp) sind die Koordinaten und Left + Top = 2 !!!

Nur bei PopUp (ohne Rahmen) fangen die Koordinaten korrekt bei 0,0 an.

Beispiel:
Wenn ich ein Fenster habe (z.B. Form), was keinen Rahmen (und daher auch keine Titelleiste) hat, und ich dieses Fenster maximiere (gnzer Bildschirm), dann würde ich erwarten, dass die Koordinaten Top,Left = 0,0 sind. Sind sie aber nicht, sondern 2,2

Right + Bottom sind grundsätzlich um 1 Px zu groß (z.B. Right - Left + 1 , also die Breite , ergibt 1025 !!!)

Kann ja sein, dass man das bei M$ nicht so eng sieht, ich brauche die Werte aber leider genau - und zwar zuverlässig. Wenn jemand einen Tipphat, danke.

***

EDIT: Ich verwende aus bestimmtem Grund Access 2000. Ich gehe aber davon aus, dass sich die API-Function 'GetWindowRect' nicht geändert hat.

Beitrag wurde zuletzt am 14.01.16 um 18:26:07 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warum liefert GetWindowRect falsche Daten? 
Autor: schmidt34
Datum: 14.01.16 23:53

Weiß das wirklich keiner?

Oder sind APIs unmodern geworden?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warum liefert GetWindowRect falsche Daten? 
Autor: ModeratorDieter (Moderator)
Datum: 15.01.16 07:16

Die Rahmenbreite wird immer mitgerechnet - auch bei Vollbild.
Beträgt die Rahmenbreite bspw. 4 Pixel und das Fenster wird im Vollbild dargestellt, wird als Left und Top Position der Wert -4 angegeben. Right und Bottom sind demnach 2 x 4 Pixel größer als erwartet.

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warum liefert GetWindowRect falsche Daten? 
Autor: schmidt34
Datum: 16.01.16 08:03

Danke Dieter. Welcher Rahmen soll denn mitgerechnet werden, wenn das Fenster keinen hat?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warum liefert GetWindowRect falsche Daten? 
Autor: Blackbox
Datum: 21.01.16 18:28

Hallo,

GetWindowRect() steht immer im Zusammenhang mit dem Screen.
Um die korrekten Werte zu bekommen muss die RECT-Struktur, die man mit dieser WinAPI bekommt, mit ClientToScreen() bzw. ScreenToClient() konvertiert werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warum liefert GetWindowRect falsche Daten? 
Autor: schmidt34
Datum: 23.01.16 23:07

Das tue ich doch schon.
Die mit GetWindowRect() erhaltenen Koordinaten konvertiere ich mit ScreenToClient() vom OutsideWindow ins InsideWindow.

ABER:

Wenn GetWindowRect() bei maximiertem Fenster eine Fensterbreite von 1025 (!!!) liefert, habe ich damit ein Problem.

BEISPIEL 1:

Die Screen-Auflösung beträgt 1024x768.
Right - Left + 1 muss meiner Ansicht nach 1024 geben
GetWindowRect() liefert mir aber 1025 !!!

BEISPIEL 2:

Bei voll geöffnetem Fenster (maximiert, ohne Rahmen) muss Left,Top jeweils 0,0 sein.
GetWindowRect() liefert mir aber 2,2

Was rechnet Microsoft da für einen Bockmist?
Ich bezweifle, dass ich da was falsch mache.

Beitrag wurde zuletzt am 23.01.16 um 23:09:07 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel