Bildschirmeinstellungen ändern (nur für Anwendung)



  • Hallo. Ich würd ganz gern mal wissen, wie man (z.B. für ein Spiel) die Bildschirmeinstellungen ändert, z.B. Bildschirmauflösung, usw. a gabs doch ne relativ einfache Funktion im BCB, aber die find ich nicht, auch hier irgendwie nicht.



  • DEVMODE dmod;
    memset(&dmod,0,sizeof(dmod));
    dmod.dmSize=sizeof(dmod);
    dmod.dmPelsWidth = 800; // zB
    dmod.dmPelsHeight = 600; // zB
    dmod.dmBitsPerPel = 16; // zB
    dmod.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
    ChangeDisplaySettings(&dmod,CDS_FULLSCREEN);



  • OK, danke, alles schön und gut, aber wie kann ich den vorherigen Modus wiederherstellen? Ist nämlich wichtig, dass der Modus nur für meine Anwendung gewechselt wird, und dann wieder zurückgesetzt wird. Danke schonmal in Voraus!



  • Mit EnumDisplaySettings(0, 0, &dmod_old) kannst du die aktuellen Einstellungen auslesen und zwischenspeichern.



  • Also wenn ich bei OnCloseQuery folgendes eintrage:

    ChangeDisplaySettings(&dmod_old,CDS_FULLSCREEN);
    

    Dann funktionierts nicht. Natürlich hab ich dmod_old als DEVMODE deklariert und im onCreate-Ereignis der Form, noch bevor ich die Einstellungen ändere, deinen Code eingetragen, aber es läuft nicht.



  • "Funktioniert nicht" ist keine angemessene Problembeschreibung.

    Und was hast du getan, um den Fehler einzugrenzen? Hast du z.B. den Rückgabewert von ChangeDisplaySettings ausgewertet? Funktioniert das Zurücksetzen an anderer Stelle im Programm? Usw. usf.



  • Naja, ok:

    Rückgabewert: 1
    Funktioniert an anderer Position (z.B. ButtonClick): Nein

    Aber: ICh hab mir verschiedene Werte mal angesehen, und sie stimmen mit dem, was vorher war nicht überein:

    Vorher:
    Auflösung von 1024x768, 16 BPP

    Angezeigt:
    Auflösung von 640x480, 4 BPP

    Ich muss aber die vorherigen Einstellungen herbekommen. Oder mal anders ausgedrückt: Wie bekommt man die BPP (BitsPerPel), die gerade verwendet werden?



  • Windoof schrieb:

    Rückgabewert: 1

    Und was könnte das, nach den Angaben in der Hilfe zu ChangeDisplaySettings, wohl bedeuten?

    ICh hab mir verschiedene Werte mal angesehen, und sie stimmen mit dem, was vorher war nicht überein

    Mein Fehler, sorry. EnumDisplaySettings hilft hier nicht wirklich weiter, da es lediglich alle verfügbaren Modi auflistet, nicht den akuellen. Angezeigt wurde hier somit die "kleinste" einstellbare Auflösung.

    Bildschirmbreite und -höhe kannst du aber leicht mit Hilfe des Screen-Objektes ermitteln, und die Farbtiefe bekommst du wie folgt:

    HDC hdc = GetDC(0);
    int BPP = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);
    


  • Cool, danke, jetzt gehts einwandfrei.


Log in to reply