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
Все