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 gadgetsIf 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 basIf 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