Metrics unter Windows



  • Hi Leute.
    Mein Programm funktioniert nun soweit und ich kann auch mehrere Clients resizen etc.
    Jetzt würde ich aber gerne das ganze noch perfektionieren.
    Wenn das Fenster resized wird, wird der Font etwas komisch dargestellt. Klar, liegt daran dass der Backbuffer nicht mehr 100% stimmt. Da ich nicht weiss (ehrliche Ansage) wie man DirectX korrekt hookt, hab ich mir folgendes gedacht:
    Man müsste in die ConfigDateien schreiben dass das Fenster im Windowed Mode etwas größer ist als sonst und zwar zuzüglich der Ränder und dem Titelbalken oben.
    Da aber alle OS XP aufwärts versch. Themes erlauben wollte ich Fragen ob man die Größe dieser Dekorationen iwie abfragen kann? So dass ich die benötigte Größe abhängig vom Theme korrekt berechnen kann, damit das Fenster ohne die Fensterdekorationen dann die richtige Größe hat.
    rya.



  • GetSystemMetrics



  • und evtl. auch SystemParametersInfo() mit SPI_GETNONCLIENTMETRICS ?

    Also ehrlich gesagt, ist mir nicht ganz einleuchtend, warum Du dieses Problem hast?

    Für gewöhnlich hast Du ein Fenster.
    Egal ob Parent oder Child.

    Und jedes Fenster hat zwei Areas: 1) Gesamtgröße und 2) Client-Bereich.
    zu 1) kriegst Du die Infos per GetWindowRect()
    zu 2) kriegst Du die Infos per GetClientRect()

    Die Breiten und Höhen der Randelemente des Fensters ist ja nichts anderes als die Differenz zwischen Gesamtgröße und Client-Bereich.
    Damit müßtest Du doch prima auskommen.
    Vor allem bist Du dann völlig unabhängig davon, ob überhaupt ein Theme aktiviert wurde und welche Theme.

    HTH,
    Martin



  • GetSystemMetrics hat gereicht, ich bekomme die aktuellen Daten.
    Warum ich dieses Problem habe? Ich verändere das Fenster eines Spieles und der Font schaut dann leicht komisch aus. Ich dachte ich kann das beheben indem ich das Fenster einfach größer mache vor dem resizen und der Backbuffer die richtige Größe hat. Allerdings scheint das Programm das zu verhindern durch interne Checks.. es funktioniert so nicht^^.
    rya.



  • Hääää?
    Was genau meinst Du mit dem Backbuffer?

    Ohne nähere Erläuterung stelle ich mir die Größe des Backbuffers genauso groß wie die Pixelanzahl des Clientbereichs des Fensters vor (also der inneren Nutzfläche ohne Rand).

    Sprichst Du von Deinen eigenen Fenstern oder von fremden Prozessen?
    Martin



  • Nein, ich verändere das Fenster eines DirectX Spieles, namentlich Anarchy Online. Ich maximiere das quasi einfach und entferne die Titelbar...
    Das Programm kriegt das aber nicht mit scheinbar. Wobei es nach dem letzten Patch erst überhaupt geht, vorher hat diese Methode das ganze Programm unspielbar gemacht.



  • Ich dachte, Du redest von ganz normalen Fenstern und willst ganz normal die Größe ändern, ohne die sonstigen Eigenschaften des Fensters zu manipulieren.
    Ok, dann ist nun alles klar.


Log in to reply