Dicke von Fenster-Titelleiste und -Rahmen bestimmen (SetWindowPos)



  • Hallo,

    ich verändere die Größe von Dialogfenstern mithilfe der MFC-Methode SetWindowPos(). Wenn ich die Größe des Fensters beispielsweise auf 600x400 Pixel ändere ist die nutzbare Fläche innerhalb des Fensters allerdings geringer, also etwa 594x370, da zu der Größe die Dicke der Titelleiste und des Rahmens des Fensters mitgezählt werden. Die Dicke der Titelleiste ist aber je nach Windows-Version und Design (Classic, XP, Vista) unterschiedlich,
    deswegen muss ich das während der Laufzeit bestimmen. Ich möchte dann auf der nutzbaren Fenster-Fläche Controls wiederum per SetWindowPos() anordnen.

    Wie kann ich die Dicke der Titelleiste und des Rahmens mithilfe von der MFC bestimmen?

    Grüße
    DaOne



  • Schau dir mal GetSystemMetrics an. 🙂


  • Mod

    Man kann durch Verwendung von AdjustWindowRect(Ex) ohne großen Aufwand vom Client-Rect auf das Window Rect hochrechnen.



  • Vielen Dank euch beiden, das hilft mir, glaube ich, weiter.

    @estartu: Echt schnelle Antwort von dir. Bei dem GetSystemMetrics finde ich auch noch einiges, das ich als nächstes gefragt hätte 👍 😉

    @Martin: Wenn das auch mit Dialogen funktioniert ist das natürlich ideal. Das muss ich mal etwas rumprobieren.

    Hm, jetzt habe ich das auch geschnallt wofür das Feld für den Usernamen ist. Ich dachte ich wäre schon eingeloggt. 🤡


  • Mod

    Das geht für ale Standard-Fenstertypen!



  • Gibt es dann auch die umgekehrte Richtung, also ich lege die äußere Größe eines Fensters fest und kann dann die nutzbare innere Fläche (client area) bestimmen?
    Mithilfe von GetSystemMetrics() habe ich das schon hingekriegt, also die Größe der Borders und Caption bestimmen und dann eben von der Fenstergröße abziehen. Aber vielleicht gibt es da auch eine spezielle Methode dafür. Außerdem brauche ich eben die aktuelle Größe des Fensters.

    Das bringt mich zur nächsten Frage: Wie kann ich die aktuelle Größe und Position eines Fensters bestimmen?



  • GetWindowRect und GetClientRect sollten es sein. 🙂



  • Danke, genau das ist es! 😉


Log in to reply