Deaktivieren von move, size, maximize bei einem Fenster



  • Hallo,

    ich möchte mein Program im maximierten / fullscreen Modus starten und dem Benutzer nur die Möglichkeit geben es in die Taskleiste zu minimieren oder zu schließen. Dazu will ich eben alle Funktionen das Fenster zu verschieben oder die Größe zu ändern deaktivieren.

    Ein wenig Erfolg hatte ich durch anpassen der Window-Styles. Lässt man WS_THICKFRAME WS_MAXIMIZEBOX weg so kommt das der Sache schon näher. Leider kann man immer noch das Icon anklicken und im erscheinenden Menü die Funktionen auswählen. Am hartnäckigsten ist aber der Doppelklick auf die Titelleiste, die restore auslöst. Das Fenster wird von fullscreen zu einer kleineren Ansicht skaliert und ich finde partout keine Möglichkeit diese Funktion zu unterbinden.

    Kennt da jemand eine Lösung? Ziel ist wie gesagt die Applikation auf Vollbildansicht einzuschränken.

    Danke!



  • Da gibt es mehrere Möglichkeiten. Du kannst z.B. die Window Styles in der Laufzeit verändern bzw. deaktivieren:

    SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_MINIMIZEBOX);
    

    Um alle Funktionalitäten eines fullscreen-Fensters zu (de)aktivieren, solltest du noch ein paar Schritte durchführen:
    http://social.msdn.microsoft.com/Forums/en-CA/vclanguage/thread/6c9d9442-2a58-4477-bd68-7aae4dece23c

    Eigentlich ist das eine häufig gestellte Frage in diversen Foren und du solltest nicht allzulange suchen müssen, um die Antwort zu finden:
    http://www.codeguru.com/forum/showthread.php?t=363171
    http://www.iphpbb.com/foren-archiv/2/86400/86280/winapi-vollbild-modus-66195854-100388-22.html

    Was vielleicht noch interessant sein könnte:
    klick (nach ShowTaskBar() und ShowMenuBar() suchen)

    Grüße,
    Rewind.



  • Probiere einfach, was du mit der Bearbeitung von WM_MOVE und WM_SIZE alles machen kannst. Du merkst dir die Position und die Grösse des Fensters und setzt sie neu sobald sie vom Benutzer verändert werden soll.



  • Kennt da jemand eine Lösung? Ziel ist wie gesagt die Applikation auf Vollbildansicht einzuschränken.
    Danke!

    Wozu soll das ueberhaupt gut sein?
    Eine App die sich so verhaelt wuerde ich sofort wieder vom Rechner schmeissen! Der Desktop gehoert mir! Wie gross ich welches Fenster mache entscheide ich und sonst keiner...

    gruss
    Dirk



  • dbu schrieb:

    Wozu soll das ueberhaupt gut sein?
    Eine App die sich so verhaelt wuerde ich sofort wieder vom Rechner schmeissen! Der Desktop gehoert mir! Wie gross ich welches Fenster mache entscheide ich und sonst keiner...

    Dann entscheidest du, was auf deinem Desktop zu sehen ist? Ich kann das jederzeit in einem eigenen Programm ändern. Der Desktop gehört dir, das Programm aber mir. Schmeiss es vom Rechner, wenn dir eine solche Besonderheit nicht gefällt. Und verzichte auf die Leistungen des Programmes oder schreibe sie selber! 😞



  • dbu schrieb:

    Kennt da jemand eine Lösung? Ziel ist wie gesagt die Applikation auf Vollbildansicht einzuschränken.
    Danke!

    Wozu soll das ueberhaupt gut sein?
    Eine App die sich so verhaelt wuerde ich sofort wieder vom Rechner schmeissen! Der Desktop gehoert mir! Wie gross ich welches Fenster mache entscheide ich und sonst keiner...

    gruss
    Dirk

    Das Programm ist auch nicht für trotzige Privatanwender geschrieben, sondern für die Forschung. Und wenn du ein solch spezialisiertes System kaufst gehört der Desktop dem Entwickler.

    Allen anderen vielen Dank für die Hilfe.



  • Wireman schrieb:

    dbu schrieb:

    Kennt da jemand eine Lösung? Ziel ist wie gesagt die Applikation auf Vollbildansicht einzuschränken.
    Danke!

    Wozu soll das ueberhaupt gut sein?
    Eine App die sich so verhaelt wuerde ich sofort wieder vom Rechner schmeissen! Der Desktop gehoert mir! Wie gross ich welches Fenster mache entscheide ich und sonst keiner...

    gruss
    Dirk

    Das Programm ist auch nicht für trotzige Privatanwender geschrieben, sondern für die Forschung. Und wenn du ein solch spezialisiertes System kaufst gehört der Desktop dem Entwickler.

    Allen anderen vielen Dank für die Hilfe.

    das hat nichts mit "trotzigem Privatanwender" zu tun, sondern mit gutem GUI-Design. In der aktuellen Windows-Welt gehoert der Desktop dem Anwender und nicht dem Entwickler! Wenn dem nicht so waere haette Microsoft sicherlich eine einfache (saubere) Methode zur Loesung deines Problems in der Win32-api vorgesehen. Diese gibt es aber nicht.



  • Wieso, es gibt eine einfache und saubere Methode: CreateWindow gleich die passenden Dimensionen und die Styles WS_POPUP, WS_MAXIMIZE und WS_SYSMENU auf den Weg geben
    ➡ keine Titelbar, keine Größenänderung möglich, aber nach wie vor ein Wechseln der Anwendung mittels Alt+Tab.
    Man kann auch noch zwei Schaltflächen fürs Schließen/Minimieren oben rechts in die Ecke zeichnen.
    Damit die Taskleiste und Sidebars auch noch sichtbar bleiben, bietet sich die Funktion GetMonitorInfo und die Auwertung von rcWork an, für eine wirkliche Vollbildanwendung auf dem primären Monitor reicht GetSystemMetrics(SM_CXSCREEN / SM_CYSCREEN).

    Edit: Userunfreundlich wäre es, wenn das Fenster zusätzlich HWND_TOPMOST wäre, oder es den Stil OVERLAPPEDWINDOW hätte und auf WM_NCHITTEST (immer) mit der Rückgabe von HTCLIENT reagieren würde.



  • Wireman schrieb:

    Ziel ist wie gesagt die Applikation auf Vollbildansicht einzuschränken.

    Und warum genau ist diese Beschränkung notwendig? Wenn ich das Ding eben im Fenster laufen haben will warum soll ich das nicht tun dürfen?



  • dbu schrieb:

    das hat nichts mit "trotzigem Privatanwender" zu tun, sondern mit gutem GUI-Design. In der aktuellen Windows-Welt gehoert der Desktop dem Anwender und nicht dem Entwickler! Wenn dem nicht so waere haette Microsoft sicherlich eine einfache (saubere) Methode zur Loesung deines Problems in der Win32-api vorgesehen. Diese gibt es aber nicht.

    In welcher Märchenwelt lebst du denn. Es gibt Anwendunge da ist es notwendig dass der Benutzer sowenig wie möglich manipulieren kann. Zum Beispiel in der Sicherheitbranche insbesondere Videoüberwachung, da werden Programme verwendet die laufen nur mit maximiertem Fenster und das Bedienpersonal ist nicht mal in der Lage das Programm zu beenden, geschweige denn den Rechner herunterzufahren.

    dbu schrieb:

    Der Desktop gehoert mir! Wie gross ich welches Fenster mache entscheide ich und sonst keiner...

    Und wem gehört der Desktop, dem Beteiber! Und wenn der Betreiber Leute dafür bezahlt auf eine maximierte Anwendung zu glotzen, dann haben die das gefälligst zu tun für ihr Geld, basta!

    Also nur weil dein Horizont nicht weit genug reicht, solltes du keine solche Verallgemeinerungen treffen.


  • Mod

    Der Besserwisser schrieb:

    Und wem gehört der Desktop, dem Beteiber! Und wenn der Betreiber Leute dafür bezahlt auf eine maximierte Anwendung zu glotzen, dann haben die das gefälligst zu tun für ihr Geld, basta!

    Also nur weil dein Horizont nicht weit genug reicht, solltes du keine solche Verallgemeinerungen treffen.

    Dann ist diese Methode aber der falsche Weg... dann sollte man gleich die Shell ganz ersetzen durch das eigene Programm, anstatt den Desktop nur zu verdecken...

    Der eingeschlagene Weg ist in diesem Fall unprofessionell.



  • Martin Richter schrieb:

    Der Besserwisser schrieb:

    Und wem gehört der Desktop, dem Beteiber! Und wenn der Betreiber Leute dafür bezahlt auf eine maximierte Anwendung zu glotzen, dann haben die das gefälligst zu tun für ihr Geld, basta!

    Also nur weil dein Horizont nicht weit genug reicht, solltes du keine solche Verallgemeinerungen treffen.

    Dann ist diese Methode aber der falsche Weg... dann sollte man gleich die Shell ganz ersetzen durch das eigene Programm, anstatt den Desktop nur zu verdecken...

    Der eingeschlagene Weg ist in diesem Fall unprofessionell.

    👍
    so isset, in normalen Applikationen haben solche Hacks jedenfalls nichts zu suchen.


Anmelden zum Antworten