OpenWindowedScreen()

Syntaxe

Resultat = OpenWindowedScreen(FenetreID, X, Y, Largeur, Hauteur [, RedimensionnementAuto, OffsetDroit, OffsetBas [, FlipMode]])
Description
Ouvre un écran dans une fenêtre standard.

Arguments

FenetreID La fenêtre qui contient l'écran.

WindowID() peut être utilisé pour obtenir un identifiant valide.
X, Y La position de l'écran, en pixels, dans la fenêtre.
Largeur, Hauteur Les dimensions de l'écran, en pixels.
RedimensionnementAuto (optionnel)
  #True  : L'écran sera redimensionné et sont contenu sera zoomé quand les dimensions de la fenêtre changeront.
  #False : Pas de redimensionnement de l'écran (par défaut).   
OffsetDroit, OffsetBas (optionnel) Définissent les marges droite et basse dans la fenêtre, en pixels. (Pour prendre en compte la barre d'état (statusbar) par exemple).
FlipMode (optionnel) Mode de synchronisation avant d'interchanger les buffers (Synchro Vertical).
Peut être une des valeurs suivantes :
   #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).

Valeur de retour

Renvoie une valeur non nulle si l'écran a été créé avec succès, zéro sinon.

Remarques

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

Les dimensions de l'écran ne peuvent être supérieures à celles de la fenêtre sinon des artéfacts apparaitront.

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().

Comme une fenêtre est ouverte, les évènements de la fenêtre doivent être traitées avec WindowEvent() pour avoir un comportement correct. Tous les évènements doivent être traités avant de 'flipper' (interchanger) les tampons (voir les exemples ci-dessous et FlipBuffers()).

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.

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 et marge du bas
  If InitSprite() = 0
    MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 420, 200, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
    CreateStatusBar(0, WindowID(0))
      AddStatusBarField(420)
      
    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

Voir aussi

OpenScreen(), FlipBuffers()

OS Supportés

Tous

<- OpenScreen() - Screen Index - ScreenDepth() ->