Auf das Minimieren/Maximieren eines Vollbild-Spiels reagieren



  • Hi!

    Wie erkenne ich, wann eine Vollbild-Direct3D-Anwendung minimiert oder maximiert wird?
    Es gibt so viele Nachrichten und ich blicke nicht mehr durch 😞
    Zuerst dachte ich an WM_SIZE, aber das wird nur beim Maximieren empfangen...

    WM_ACTIVATEAPP?
    WM_ACTIVATE?
    WM_NCACTIVATE?
    WM_WINDOWPOSCHANGING/CHANGED?
    WM_SETFOCUS/KILLFOCUS?

    Es muss wirklich verlässlich sein. Also egal, aus welchem Grund sich die Volldbildanwendung minimiert, es muss erkannt werden.

    Danke schon mal!



  • Falls du nen verlässlichen Weg findest den aktuellen Status abzufragen, könntest du als "Fallback" pollen.
    Also einfach jedes Frame checken ob du noch "Fullscreen bist" oder nicht.
    Oder evtl. über nen WM_TIMER alle 0,5 Sekunden, falls du keinen Update-Loop hast der permanent läuft.

    Ist vielleicht nicht die "schönste" Lösung, aber wenn irgendwas 100% sicher sein muss, und ich den Events aus irgend einem Grund nicht zu 100% vertraue, mache ich das so.


  • Mod



  • Polling? Das muss doch anders gehen...

    @Martin
    Laut Spy++ wird WM_SIZE nur beim Maximieren empfangen. Dann drücke ich die WIN-Taste, das Spiel minimiert, aber es wird dann kein weiteres WM_SIZE mehr empfangen.



  • MSG msg = { }; schrieb:

    Polling? Das muss doch anders gehen...

    Klar "muss" es anders gehen.
    Die Frage ist ob sich der Aufwand lohnt in Erfahrung zu bringen wie.

    Ich bin auch ganz allgemein der Meinung dass Polling viel zu sehr verteufelt wird.

    Aber mach wie du meinst.



  • Jo stimmt schon, so schlimm ist Polling meist nicht. Ich hätt's halt trotzdem gerne elegant.
    Wundert mich, dass Windows nicht einfach eine Notification sendet 🙄

    Also dann halt mit Polling. D3DERR_DEVICELOST nehm ich mal an.



  • MSG msg = { }; schrieb:

    Jo stimmt schon, so schlimm ist Polling meist nicht. Ich hätt's halt trotzdem gerne elegant.
    Wundert mich, dass Windows nicht einfach eine Notification sendet 🙄

    Windows sendet ganz sicher entsprechende Notifications.
    Wenn ich wüsste welche, würde ich es dir auch verraten 🙂

    Aber vielleicht liest das noch einer der WinAPI Cracks und schreibt es dir.

    Also dann halt mit Polling. D3DERR_DEVICELOST nehm ich mal an.

    Dadurch bekommst du auf jeden Fall mit, wenn das Device futsch ist.
    Wenn das reicht, dann ja 🙂


  • Mod

    MSG msg = { }; schrieb:

    @Martin
    Laut Spy++ wird WM_SIZE nur beim Maximieren empfangen. Dann drücke ich die WIN-Taste, das Spiel minimiert, aber es wird dann kein weiteres WM_SIZE mehr empfangen.

    Der Minimize auf die Taskleiste wird IMHO über WM_SHOWWINDOW abgehandelt.



  • WM_SHOWWINDOW wird laut Spy++ nicht empfangen.

    @hustbaer
    Ich denke schon? DEVICELOST bekommt man doch immer, wenn die Anwendung minimiert ist...
    Was könnte ich denn sonst prüfen, außer das d3d device cooperative level?



  • Na den Zustand des Fensters. Das müsste doch irgendwie gehen...



  • IsIconic()/IsZoomed() wahrscheinlich.


Log in to reply