normale Fenstergröße bei wsMaximized
-
Wie komme ich an die "normale" Fenstergröße wenn das Fenster maximiert ist?
Die Eigenschaften von TForm geben darüber irgendwie keine Auskunft.Hab mir jetzt aus der WinApi GetWindowPlacement() geholt, komme damit aber beim besten Wille nicht zurecht:
WINDOWPLACEMENT* lpWnd; GetWindowPlacement(this->WindowHandle, lpWnd); int WinTop=lpWnd->rcNormalPosition.top;
Erzeugt bei mir in der 3. Zeile eine Zugriffsverletzung bei Adresse sowiso.
Laut API darf GetWindowPlacement() bei erfolgreicher Ausführung keine "0" zurückgeben, tuts bei mir aber
Wäre nett, wenn mir einer erklären könnte, was ich falsch mache. Hab mit WinApi so gut wie keine Erfahrung.
mfg xxx
-
Ich nehme mal an, du hast für lpWnd keinen Speicherplatz vereinbart. GetWindowPlacement macht das nämlich nicht für dich.
Kurzer Ausschnitt aus der Hilfe dazulpwndpl
Pointer to the WINDOWPLACEMENT structure that receives the show state and position information.
Before calling GetWindowPlacement, set the length member of the WINDOWPLACEMENT structure to sizeof(WINDOWPLACEMENT). GetWindowPlacement fails if lpwndpl->length is not set correctly.Sieh mal in der Hilfe dazu nach GetWindowPlacement
Ansonsten frag mal im WinAPI-Forum nach.Ciao
-
Wunderbar, hat geklappt!
Musste lpWnd mit new erstellen und hab dann lenght über sizeof zugewiesen.
danke
-
-=]xXx[=- schrieb:
Musste lpWnd mit new erstellen [...]
Mit new!?
WINDOWPLACEMENT lpWnd; lpWnd.length = sizeof(WINDOWPLACEMENT); if (GetWindowPlacement(WindowHandle, &lpWnd)) Caption = lpWnd.rcNormalPosition.top;
Hab mit WinApi so gut wie keine Erfahrung.
Die Suchfunktion funktioniert auch für's WinAPI-Forum!
-
Ja, mit new!
nur
lpWnd.length = sizeof(WINDOWPLACEMENT);
hat er nicht akzeptiert.
-
Mein o.g. Beispiel funktioniert 100%.
Ohne new.Und "nicht akzeptiert" ist keine ausreichende Fehlermeldung oder Problembeschreibung.
-
Es läuft, ich bin glücklich und wenn es irgendwann mal nicht mehr laufen sollte melde ich mich halt noch mal
-
Oh, bitte entschuldige, dass ich dich falsch eingeschätzt habe. Ich war davon ausgegangen, dass dich auch das Wie und Warum einer Lösung (bzw. eines Fehlers) interessiert.
So kann man sich täuschen.
-
Also, da du ja keine Ruhe gibst
Wenn ich das ohne new mache bekomme ich den Laufzeitfehler:
"Zugriffsverletzung bei Adresse blablabla. Lesen von Adresse Blablabla!"liegt meiner bescheidenen Meinung nach einfach daran, das ich (wie oben geschrieben) WINDOWPLACEMENT* benutze du aber WINDOWPLACEMENT also muss ich den speicher mit new reservieren.
Dein Weg klappt aber auch