PureBasic

OpenWindowedScreen()

Синтаксис

Result = OpenWindowedScreen(WindowID , x , y , Width , Height [, AutoStretch , RightOffset , BottomOffset [, FlipMode]])

Описание


Открывает новый Экран (Screen) с указанными параметрами в стандартном окне. Окно должно быть предварительно открыто с помощью OpenWindow(). "Оконный экран" использует аппаратное ускорение так же, как и полноэкранный режим, который создаётся функцией OpenScreen().
Инициализация Спрайтов с помощью InitSprite() должна осуществляться перед использованием этой команды.
Поскольку открыто окно, для правильного поведения события окна должны обрабатываться с помощью функции WindowEvent(). Все события должны быть обработаны перед тем, как переключатся буферы. (см. Примеры ниже и FlipBuffers()).

Параметры

WindowID Идентификатор окна, используемого для создания экрана. Корректный идентификатор 'WindowID' можно получить с помощью функции WindowID().
x, y Позиция Экрана в указанном окне, в пикселях.
Width, Height Разрешение Экрана, в пикселях.
AutoStretch (дополн.) Авто подгонка размера Экрана. Может быть одним из следующих значений:
   #True  - При изменении размера окна область экрана будет автоматически изменяться
   #False - Нет изменения размера экрана (по умолчанию)   
       
RightOffset, BottomOffset (дополн.) Устанавливает поля справа и снизу окна, в пикселях, (например, для строки состояния).
FlipMode (дополн.) Устанавливает метод синхронизации Экрана, используемый при переключении буферов (также известный как 'Вертикальная синхронизация'). Может быть одним из следующих значений:
   #PB_Screen_NoSynchronization   : отключенная синхронизация 
   #PB_Screen_WaitSynchronization : включенная синхронизация (значение по умолчанию)
   #PB_Screen_SmartSynchronization: включенная синхронизация с экономией процессорного времени (только в полноэкранном режиме)
Ожидание синхронизации Экрана позволяет сделать переключение идеальным (без 'разрывов' и других видимых артефактов), потому что переключение выполняется, когда Экран полностью прорисован (и когда поверхность вывода Экрана находится за пределами видимой области Экрана). Это также связывает частоту переключения с фактическим обновлением Экрана, то есть: для Экрана с частотой 60 Гц оно может составлять не более 60 раз в секунду и т.д.

Возвращаемое значение

Возвращает ненулевое значение, если экран был создан успешно, в противном случае - 0.

Комментарии

Нельзя создать более одного оконного экрана одновременно. Размер экрана не может быть больше размера окна, иначе могут возникнуть артефакты.

Пример: Фиксированный размер экрана с Гаджетами

If InitSprite() = 0
    MessageRequester("Ошибка", "Не могу открыть экран & среда спрайтов!", 0)
    End
EndIf

If OpenWindow(0, 0, 0, 220, 160, "Экран в окне...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 170, 135, 45, 20, "Quit")

    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("Ошибка", "Не могу открыть оконный экран!", 0)
        End
    EndIf
EndIf

direction = 2
Repeat
    ; Очень важно обрабатывать все события оставшиеся в очереди, в каждом кадре
    ;
    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

Пример: Экран с включенной функцией автоматического растяжения и смещения

If InitSprite() = 0
    MessageRequester("Ошибка", "Не могу открыть экран & среда спрайтов!", 0)
    End
EndIf

If OpenWindow(0, 0, 0, 420, 200, "Экран в окне...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
    CreateStatusBar(0, WindowID(0))
    AddStatusBarField(420)

    StatusBarText(0, 0, "Автоматически увеличенная область экрана при изменении размера окна...")

    If OpenWindowedScreen(WindowID(0), 0, 0, 420, 200, #True, 0, 20)

        CreateSprite(0, 50, 50) ; Создайте пустой спрайт, будет весь черный

        Repeat
            ; Очень важно обрабатывать все события оставшиеся в очереди, в каждом кадре
            ;
            Repeat
                Event = WaitWindowEvent(10)

                If Event = #PB_Event_CloseWindow
                    End
                EndIf
            Until Event = 0

            FlipBuffers()
            ClearScreen(RGB(0, 0, 200)) ; Синий фон

            DisplaySprite(0, 10, 10) ; Показывает наш черный ящик в левом верхнем углу
            DisplaySprite(0, 260, 10) ; Показывает наш черный ящик в правом верхнем углу
        ForEver

    Else
        MessageRequester("Ошибка", "Не могу открыть оконный экран!", 0)
    EndIf
EndIf


Более подробный пример посмотрите на:

Пример

WindowedScreen.pb

См. также

OpenScreen()

Поддерживаемые OS

Все

<- OpenScreen() - Оглавление Screen - ScreenDepth() ->