PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vollbild-Modus?


Vedek Bareil
2003-01-01, 00:45:51
wie programmiere ich unter Windows ein Programm, das im Vollbildmodus läuft?
Ich hab das mal in Delphi so gemacht, daß ich beim Programmfenster den BorderStyle auf bsNone und den WindowState auf wsMaximezed gesetzt habe. Das sah dann aus wie ein echter Vollbildmodus (also ohne Fensterränder und ohne Taskleiste), allerdings bezweifle ich, daß das mehr war als eine hakelige Improvisation.
Besonders störend war, daß unter Win98 (oder 95 passierte das übrigens nicht) nach Beenden des Programms des öfteren noch immer ein Eintrag in der Taskleiste, mit einem Windows-Symbol und dem Programmnamen dahinter, angezeigt wurde.

Gibt es in der Windows-API eine Funktion, mir der ich den Vollbild-Modus aufrufen kann? Oder kann an CreateWindow ein Parameter übergeben werden, der den Vollbild-Modus herbeiführt?

Danke schonmal im voraus.

Demirug
2003-01-01, 16:41:48
Bisher habe ich das mit dem vollbild im Prinzip genauso gemacht. AFAIK gibt es da auch keine Funktion um das irgendwie anders zu erreichen

Nagilum
2003-01-01, 17:29:50
Schau dir mal die Funktion "ChangeDisplaySettings()" in Verbindung mit "CDS_FULLSCREEN" an.

Vedek Bareil
2003-01-01, 20:15:32
Originally posted by Nagilum
Schau dir mal die Funktion "ChangeDisplaySettings()" in Verbindung mit "CDS_FULLSCREEN" an. Hm, ich habe in einem OGL-Tutorial:
http://nehe.gamedev.net/tutorials/lesson.asp?l=01
was dazu gefunden. ChangeDisplaySettings dient da, soweit ich das beurteilen kann, nur zum Ändern der Bildschirmauflösung. Der eigentlich Vollbildmodus wird da so ähnlich erreicht, wie ich es schon unter Delphi probiert hatte: Mit CreateWindow wird ein Fenster von der Größe der Auflösung erzeugt, und Titelleiste und Fensterränder werden durch die Wahl eines geeigneten Window-Styles, im dortigen Beispiel WS_POPUP, zum Verschwinden gebracht.

Nagilum
2003-01-01, 20:21:53
Klar, so mach ich das auch immer.

Aber ohne ChangeDisplaySettings() bekommst du ja die Taskleiste nicht weg. Zumindest kenn ich keine andere, einfache Lösung.

Vedek Bareil
2003-01-02, 00:02:37
Originally posted by Nagilum
Aber ohne ChangeDisplaySettings() bekommst du ja die Taskleiste nicht weg. Zumindest kenn ich keine andere, einfache Lösung. wieso das denn nicht? Ich hab unter DevC++ mal einfach folgendes gemacht:

hWnd = CreateWindow (
"GLSample", "OpenGL Sample",
WS_POPUP | WS_VISIBLE,
0, 0, 1024, 768, //Bildschirmauflösung 1024*768
NULL, NULL, hInstance, NULL);
und das Teil läuft als Vollbild, keine Taskleiste zu sehen. Wie sollte denn ChangeDisplaySettings überhupt zum Verschwinden der Taskleiste beitragen, wenn es doch nichts weiter tut als die Auflösung umzustellen?

Ich hab übrigens unter Delphi das Problem gelöst, daß das Programm nach Beenden noch immer in der Taskleiste angezeigt wurde: ich habe in der OnClose-Routine Application.Minimize eingefügt, dadurch wechselt das Prog unmittelbar vor dem Beenden noch schnell vom Vollbild- in den minimierten Zustand, und das bringt die Taskleistenanzeige zum Verschwinden :)

Nagilum
2003-01-02, 00:45:15
Fullscreen != Fullscreen :)

Mit CDS_FULLSCREEN bekommt deine App exklusiven Zugriff auf den Desktop. Das nutzen viele Grafikkarten-Treiber z.B. für Optimierungen. Mit deiner Methode "versteckst" du ja nur die anderen Fenster. Und bei bestimmten Treiber/OS-Kombinationen verschwindet so die Taskleiste eben nicht. :(

Das ist zumindest das, was man immer wieder hört und was auch empfohlen wird. CDS_FULLSCREEN ist ja leider total undokumentiert.

Vedek Bareil
2003-01-02, 01:21:43
Ach so ist das. Gut zu wissen :)