Fensterinnengröße



  • Ich will ein Fenster erstellen, dessen Anwendungsbereich eine ganz bestimmte Größe hat. Die Werte, die ich als Parameter bei CreateWindow() angebe, bestimmen ja die Größe des gesamten Fensters (also mit Titelleiste, Menüleiste, Rahmen, ...).

    Habe schon versucht zu den Werten, die ich haben will die Abmessungen der Rahmen und Leisten (GetSystemMetrics(SM_CXBORDER), ...) hinzuzurechnen, aber
    es stimmt trotzdem nicht.

    Gibt es eine Möglichkeit ein Fenster so anzulegen, dass der Anwendungsbereich eine bestimmte Größe hat ?

    Mfg Nico



  • Zu welchem Zweck soll das geschehen?



  • Also ich will in mein Hauptfenster 2 Unterfenster einfügen.
    Eines soll quadratisch sein und den größten (unteren) Teil des Fensters ausfüllen und das 2. Fenster soll so eine Art von Leiste darüber sein.
    (Es soll so in etwa aufgebaut sein wie Minesweeper)

    Wenn jemand eine Idee hat wie man das realisieren kann ohne da Pixel zu zählen und dann alles irgendwie so zu verschieben das es passt....



  • AdjustWindowRect ?!



  • Bei AdjustWindowRect und Verwendung eines Menüs ist zu beachten:
    The AdjustWindowRect function does not add extra space when a menu bar wraps to two or more rows.

    Falls ein Innenbereich mit fester Pixelzahl dargestellt werden soll: bei Ausgabegeräten mit hoher Auflösung wird der Fensterinhalt u. U. zu klein. Sinnvoller ist es meist, den Fensterinhalt zu skalieren.



  • Warum holst Du Dir nicht einmal die Abmessungen für das Fenster mit GetWindowRect und anschließend die des Clientbereichs mit GetClientRect und rechnest Dir die richtige Größe dann aus?

    Nur so als Idee, ist ungetestet:

    RECT wr;
    GetWindowRect(hWnd, &wr);
    RECT cr;
    GetClientRect(hWnd, &cr);
    
    int w = (wr.right - wr.left) - (cr.right - cr.left) + 'gewünschte Breite';
    int h = (wr.bottom - wr.top) - (cr.bottom - cr.top) + 'gewünschte Höhe';
    
    MoveWindow(hWnd, x, y, w, h, true);
    

    Wie gesagt, ungetestet, aber sollte eigentlich so funktionieren.



  • Erst mal vielen dank für die schnellen Antworten!

    Werde das mit AdjustWindowRect mal ausprobieren.
    Sollte das nicht gehen, werde ich es so machen wie mantiz vorgeschlagen hat.
    Diese Idee scheint mir wirklich sehr einfach und sinnvoll... dass ich da nicht selbst draufgekommen bin 😉

    Danke Nico



  • Hat alles funktioniert!
    (Habe es nach mantiz' Methode gemacht!)

    Vielen Dank! 🙂


Log in to reply