Problem bei Auflösung ändern



  • Hallo Forum,

    folgendes Problem:
    Ich muss für die Dauer, die ein Programm läuft, die Auflösung ändern.
    Klappt auch, zumindest unter 2k.

    Jetzt bekomme ich aber Feedback, daß es wohl unter 95 zu dem Problem kommt, daß die Frequenz auf einen anderen Wert gestellt wird -> unschönes Flimmern.

    Mein Code:

    DEVMODE dNewMode;
    
    // Aktuelle Daten rausfinden
    EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &dNewMode);
    
    // Neue Setzen
    dNewMode.dmSize = sizeof(DEVMODE);
    dNewMode.dmPelsWidth = 800;
    dNewMode.dmPelsHeight = 600;
    dNewMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
    
    /*
    DM_DISPLAYFREQUENCY müsste doch bewirken, daß die Frequenz genommen wird,
    die EnumDisplaySettings rausbekommen hat, ergo keine Änderung? Oder liegt
    hier das Problem?
    Könnte es eventuell sein, daß unter 95 EnumDisplaySettings unrichtige Werte
    liefert?
    */
    
    ChangeDisplaySettings (&dNewMode, 0);
    

    Am Ende setze ich das Ganz wieder zurück mit

    ChangeDisplaySettings (NULL, 0);
    

    Also nochmal: Unter 2k funzt es, unter 95 gibt es Probleme. Irgendwelche Ideen?

    TIA



  • Du musst alle DisplaySettings enumerieren, Dir dann die passende Auflösung mit der maximale Frequenz holen. Wahrscheinlich gibts keinen Eintrag bei den Displaysettings, der mit 800x600 in der aktuellen Frequenz arbeitet.



  • Okay, danke René, das klappt!

    Aber mir ist gerade noch ein anderes, grauenhaftes Problem aufgefallen: Starte ich das Programm z.B. vom Explorer aus (d.h., der Explorer ist das aktive Fenster beim Programmstart), dann ist er nachher auf 800x600 (meine Zielauflösung) reduziert! 😮

    Wie kommt denn das???



  • Habe ein wenig gegoogelt, daß Problem ist wohl nicht ganz unbekannt.

    Wenn ich die Auflösung reduziere und dann wieder erhöhe, bleiben alle Fenster, die nicht maximiert waren, von ihrer Größe her auf die niedrigere Auflösung eingestellt.

    Eigentlich, so habe ich erfahren, sollten die Programme von sich aus auf das von ChangeDisplaySettings gesendete WM_DISPLAYCHANGE reagieren, tun sie aber nicht alle. Noch nicht mal der Explorer.
    An diesem Punkt könnte man zwar sagen, tja, Blödes M$, Pech gehabt (und das würde ich auch gern tun! *g*) aber das kommt wohl beim Kunden nicht so gut... 🙄

    Ideen?

    Ich habe, ehrlich gesagt, keine Lust, mir vor der Umstellung alle Fenster aufzählen zu lassen, mir die Größe und Position zu merken und es danach wieder zurückzustellen! Bäh, nee. :p



  • Warum änderst Du denn die Auflösung?

    Also ich würde Dein Programm sofort von der Platte fegen wenn Du ungefragt meine Auflösung änderst!



  • Hepi - Wie Recht du hast! *g*

    Würde ich für ein privates Projekt auch nie tun. Aber - wie schon angedeutet - der Kunde ist König. Da hab ich leider kein Wahl. 🙄



  • Jo, und wieso *muß* dieser Auflösungswechsel unbedingt sein?

    Erzähl mal, was bastelst Du denn da?



  • @Hepi: Etwas soll im Vollbildmodus in der gewünschten Auflösung ablaufen.
    Nix Buttons, nix Fenster. 😉


Anmelden zum Antworten