OpenWindowedScreen()
Syntax
Ergebnis = OpenWindowedScreen(WindowID, x, y, Breite, Höhe, AutoStretch, RightOffset, BottomOffset [, FlipModus])Beschreibung
Öffnet einen neuen Bildschirm entsprechend den angegebenen Parametern auf dem angegebenen Fenster 'WindowID', welches zuvor mittels OpenWindow() geöffnet werden muss.
Der "Windowed Screen" (Bildschirm im Fenster) ist in der Lage, die Hardware-Beschleunigung in der gleichen Art und Weise wie der für Vollbildschirme gedachte Befehl OpenScreen() zu verwenden.
Ist 'AutoStretch' gleich 1, dann wird die Größe des Bildschirmbereichs automatisch angepasst (und der Inhalt auf die neue Bildschirm-Größe gezoomt), wenn sich die Fenstergröße ändert.
'RightOffset' und 'BottomOffset' werden benutzt, um einen rechten und einen unteren Rand des Fensters zu definieren (für eine StatusBar zum Beispiel).
Der optionale Parameter 'FlipModus' ermöglicht auf die Synchronisation des Bildschirms zu warten oder nicht zu warten, bevor die Buffer vertauscht werden (auch bekannt als 'Vertikal-Blank-Synchronisation').
Er kann einen der folgenden Werte annehmen:#PB_Screen_NoSynchronization : Synchronisation ausschalten #PB_Screen_WaitSynchronization : Synchronisation einschalten (Standard-Wert) #PB_Screen_SmartSynchronization : Synchronisation einschalten, mit einer CPU-schonenderen Routine, wenn das Programm nicht die gesamte CPU-Rechenzeit benötigt (nur bei Vollbildschirm)Das Warten auf die Bildschirm-Synchronisation ermöglicht einen perfekten Buffer-"Tausch" (Flip ohne "Ausreißer" oder andere sichtbare Artefakte), da der Flip erst nach dem vollständigen Zeichnen des Bildschirms (und wenn sich der "Screen-Spot" außerhalb des sichtbaren Bildschirmbereichs befindet) ausgeführt wird. Dies verknüpft auch die Flip-Frequenz (Häufigkeit des Buffer-Tauschs) mit dem aktuellen Bildschirm-Refresh ("Auffrischung"), z.B. bei einem 60 Hz Bildschirm sind maximal 60 Flips pro Sekunde möglich.
Der geöffnete Bildschirm wird mit 2 Videobuffern erstellt, um das speziell für Spiele entwickelte DoubleBuffering zu ermöglichen. Die Buffer können mittels dem FlipBuffers() Befehl manipuliert werden.
Wenn das Öffnen des Bildschirms fehlschlägt, ist 'Ergebnis' gleich 0.
Hinweis: Nur ein "Windowed Screen" (also Bildschirm im/auf dem Fenster) kann zur gleichen Zeit geöffnet werden.
Beispiel 1: (feste Bildschirmgröße mit Gadgets)If InitSprite() = 0 MessageRequester("Error", "Can't open screen & sprite enviroment!", 0) End EndIf If OpenWindow(0, 0, 0, 220, 160, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ButtonGadget(0, 170, 135, 45, 20, "Quit") If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160, 0, 0, 0) CreateSprite(0, 20, 20) If StartDrawing(SpriteOutput(0)) Box(0, 0, 20, 20, RGB(255, 0, 155)) Box(5, 5, 10, 10, RGB(155, 0, 255)) StopDrawing() EndIf Else MessageRequester("Error", "Can't open windowed screen!", 0) End EndIf EndIf direction = 2 Repeat ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten ; Repeat Event = WindowEvent() Select Event Case #PB_Event_Gadget If EventGadget() = 0 End EndIf Case #PB_Event_CloseWindow End EndSelect Until Event = 0 FlipBuffers() ClearScreen(RGB(0, 0, 0)) DisplaySprite(0, x, x) x + direction If x > 140 : direction = -2 : EndIf If x < 0 : direction = 2 : EndIf Delay(1) ForEver
Beispiel 2: (Bildschirm mit aktiviertem Auto-Stretch und Bottom-Offset)If InitSprite() = 0 MessageRequester("Error", "Can't open screen & sprite enviroment!", 0) End EndIf If OpenWindow(0, 0, 0, 320, 200, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered) CreateStatusBar(0, WindowID(0)) AddStatusBarField(320) StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...") If OpenWindowedScreen(WindowID(0), 0, 0, 320, 200, 1, 0, 20) CreateSprite(0, 50, 50) ; Erstellt ein leeres Sprites, dies wird komplett schwarz sein Repeat ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten ; Repeat Event = WaitWindowEvent(10) If Event = #PB_Event_CloseWindow End EndIf Until Event = 0 FlipBuffers() ClearScreen(RGB(0, 0, 200)) ; Ein blauer Hintergrund DisplaySprite(0, 10, 10) ; Darstellung unserer schwarzen Box in der linken oberen Ecke DisplaySprite(0, 260, 10) ; Darstellung unserer schwarzen Box in der rechten oberen Ecke ForEver Else MessageRequester("Error", "Can't open windowed screen!", 0) EndIf EndIf
Für ein detaillierteres Beispiel schauen Sie in
WindowedScreen.pb
Unterstützte OS
Alle