OpenWindowedScreen()

Syntaxe

Resultat = OpenWindowedScreen(FenetreID, x, y, Largeur, Hauteur [, RedimensionnementAuto, OffsetDroit, OffsetBas [, FlipMode]])
Description
Ouvre un écran selon les paramètres spécifiés dans la fenêtre dont l'identifiant est 'FenetreID'. Cette fenêtre doit être ouverte au préalable en utilisant OpenWindow().
L'écran fenêtré emploie l'accélération matérielle de la même manière que le mode plein écran utilisant la commande OpenScreen().

Si 'RedimensionnementAuto' est #True, alors l'écran se redimensionnera automatiquement ainsi que son contenu quand la taille de la fenêtre changera.

'OffsetDroit' et 'OffsetBas' définissent les marges à droite et en bas de la fenêtre qui devront être respectées lors du redimensionnement (pour une barre d'état par exemple).

Le paramètre 'FlipMode' est facultatif et permet d'attendre ou non la synchronisation avec l'écran avant d'inverser les buffers avec FlipBuffers() (aussi connu sous le nom de 'Vertical blank synchronization'). Les valeurs possibles du paramètre 'Flipmode' sont:
   #PB_Screen_NoSynchronization   : désactive la synchronisation 
   #PB_Screen_WaitSynchronization : active la synchronisation (mode par défaut)
   #PB_Screen_SmartSynchronization: active la synchronisation en essayant de préserver le temps processeur, 
   lorsque le jeu est en mode plein écran.
Attendre la synchronisation permet d'avoir des inversions de buffers parfaites (sans 'tearing' (ancienne et nouvelle image à moitié visible) ou autres effets parasites) car l'inversion est effectuée lorsque que le faisceau lumineux est en dehors de la partie visible de l'écran. De plus, l'inversion se fait à un rythme régulier, en relation avec sa fréquence de rafraîchissement: par exemple, pour un écran en 60 Hz, l'inversion pourra se faire au maximum 60 fois par seconde (donc on aura un rythme régulier de 60 images/secondes).

L'écran est créé avec deux buffers vidéo, ce qui permet l'affichage successif des deux buffers avec la fonction FlipBuffers(), particulièrement utile pour les jeux.
Si Resultat = 0, la création de l'écran a échoué.

Note: Il n'est pas possible de créer plus d'un écran fenêtré à la fois.

Exemple

Example 1: Ecran fenêtré de taille fixe avec gadgets
  If InitSprite() = 0
    MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 170, 135, 45, 20, "Quitter")

    If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)
      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("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
      End
    EndIf
  EndIf
  
  direction = 2
  Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    ;
    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


Exemple

Example 2: Avec redimensionnement automatique
  If InitSprite() = 0
    MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 320, 200, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
    CreateStatusBar(0, WindowID(0))
      AddStatusBarField(320)
      
    StatusBarText(0, 0, "Zoom automatique lors du changement de taille de la fenêtre...")
    
  If OpenWindowedScreen(WindowID(0), 0, 0,320, 200, #True, 0, 20) 
  
    CreateSprite(0, 50, 50) ; Crée un sprite vide qui sera tout noir
  
  Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    ;
    Repeat
      Event = WaitWindowEvent(10)
      
      If Event = #PB_Event_CloseWindow
        End 
      EndIf
    Until Event = 0
    
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 200)) ; Un fond bleu
    
    DisplaySprite(0, 10, 10)  ; Affichez notre boîte noire dans le coin en haut à gauche
    DisplaySprite(0, 260, 10) ; Affichez notre boîte noire dans le coin en haut à droite
  ForEver
   
    Else
      MessageRequester("Erreur", "Impossible d'ouvrir l'écran fenêtré !", 0)
    EndIf
  EndIf


Pour plus de détail, voir cet exemple

Exemple

WindowedScreen.pb

OS Supportés

Tous

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