(DirectX)Application in Vollbildmodus bringen



  • Hallo,

    folgendes Problem: ich will mit meinem Programm eine DX-Applikation in den Vollbildmodus (also nicht Fenster maximiert sondern richtig Vollbild) bringen. Das entsprechende Tab wird in der Taskleiste angezeigt.

    Ich habe es mit SetForegroundWindow versucht, aber alles was dort passiert ist, dass das Tab in der Taskleiste den Fokus erhält. Um also effektiv in den Vollbildmodus zu kommen muss ich da nochmal Enter drücken. Ein toller Workaround ist also, den Thread dann noch ein paar Sekunden Schlafen zu legen und dann mit SendKeys ein Return zu senden. Zusätzlicher Nachteil ist, dass eben dieses Return dann ZUSÄTZLICH noch in die Messagequeue der Zielapplikation übernommen wird.

    Das kanns ja irgendwie nicht sein 😉 Gibt es eine Möglichkeit das etwas "sauberer" hinzukriegen ?

    Danke und Gruß
    Christian



  • Falsches Forum, aber du kannst mal die Device reseten und die Parameters anpassen, wie du willst.



  • Hallo,

    öh sorry das hab ich jetzt erst gesehen *peinlich*. Bitte ein Mod verschieben 😞

    Könntest du deine Antwort vielleicht etwas mehr erläutern ?

    Danke und Gruß
    Christian



  • ATM keine Zeit, aber schau mal in der DX Doku nach Device und Methode Reset. Da steht alles, was du wissen must. 😉



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo,

    ich habe mir das jetzt mal angeschaut und glaube eigentlich nicht, dass es mein Problem löst:

    "A call to Device.Reset fails if made on a different thread than the one used to create the device being reset."

    Da diese Kondition sicher gegeben ist (anderer Thread), bringt der Aufruf auch nichts.

    Gruß
    Christian



  • dwExStyle = WS_EX_APPWINDOW;
    dwStyle = WS_POPUP;
    
    SetWindowLongPtr(hWnd, GWL_EXSTYLE, dwExStyle);
    SetWindowLongPtr(hWnd, GWL_STYLE, dwStyle);
    SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, width, height, SWP_SHOWWINDOW);
    

    ggf. mit ChangeDisplaySettings() auflösung und krams ändern 🙂



  • Hallo,

    nein es geht nicht. Mit Notepad funktioniert es, aber da krieg ich das Fenster (in der aktuellen Größe) auch schon mit SetForegroundWindow in den Vordergrund 🙂

    Es läuft also eigentlich nicht darauf hinaus, die Größe des Fensters zu ändern, sondern das Fenster in den Vordergrund zu bringen.

    Ich vermute mal das Problem liegt darin, dass die DX-Applikation nicht als "Fenster" gehandhabt wird.

    Das muss doch zu lösen sein...

    Gruß
    Christian



  • Also eine DX App ist im ersten Moment immer ein Fenster. Du machst ja ein Fenster, dass du dann "füllst".

    Also normalerweise musst du da nix mehr einstellen, sondern einfach bei den PresentParameters true irgendwo angeben, dann wird das alles ganz automatisch Vollbild. Anders sieht es aus, wenn du das während es bereits läuft machen willst. Aber da funktioniert Device::Reset bestimmt. (Du musst einfach die PresentParameters, die du übergibst anpassen).



  • Wenn ich CBecker richtig verstanden habe, moechte er nicht seine eigene Anwendung in den Vollbildmodus schalten, sondern irgend eine andere.
    Der Sinn dieses Vorhabens entgeht mir allerdings noch...



  • Hallo,

    ja. Das steht doch eindeutig da oder? Scheinbar ein unlösbares Problem 🙂

    Gruß
    Christian



  • Hallo,

    Fehler gefunden. Muss den Code einfach in einem separaten Thread ausführen. Manchmal sieht man den Wald vor lauter Bäumen nicht 🙂

    Gruß
    CBecker


Anmelden zum Antworten