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

<- OpenScreen() - Sprite Inhaltsverzeichnis - SaveSprite() ->