ScreenRes
 
通过指定水平和垂直分辨率来初始化图形模式

语法

Declare Function ScreenRes ( ByVal width As Integer, ByVal height As Integer, ByVal depth As Integer = 8, ByVal num_pages As Integer = 1, ByVal flags As Integer = 0, ByVal refresh_rate As Integer = 0 ) As Integer


用法

ScreenRes width , height [, [depth ] [, [num_pages ] [, [flags ] [, refresh_rate ]]]]
result = ScreenRes( width , height [, [depth ] [, [num_pages ] [, [flags ] [, refresh_rate ]]]] )


参数

width , height
显示宽度和高度分别。对于全屏模式,用户应使用ScreenList检查分辨率的可用性。
depth
以像素为单位的颜色深度。有效的颜色深度为:12481632.1524的值也分别作为1632的别名。如果省略,默认值为每像素8位。8位及以下将提供调色板图像。默认调色板将是Screen 13中使用的256色调色板的第一个2 ^ depth 颜色。
num_pages
要创建的视频页数,默认为1.(见下文)
flags
用于设置屏幕的各种属性,包括全屏模式和使用的图形驱动程序。(见下面的标准标题“fbgfx.bi”可用的标志)
refresh_rate
屏幕所需的刷新率仅对全屏模式有影响,仅适用于某些系统和驱动程序。默认为适当的值,无效的刷新率将被忽略。

返回值

如果成功,返回零(0),否则返回非零错误代码以指示故障。(throws a runtime error) (???)

说明

ScreenRes告诉编译器链接GfxLib,并根据flags 设置初始化QB-only,QB-on-GUI或OpenGL图形模式

ScreenRes清除创建的窗口或全屏。在非全屏模式下,分辨率不必与图形卡的任何分辨率相匹配。像555x111这样的决议是可能的,GfxLib将创建一个如此大小的窗口。有关DOS问题,请参阅GfxLib概述页面。

默认情况下,ScreenRes模式中的字体大小设置为8x8。这可以通过使用Width功能设置文本行/列的数量来更改。

在仅QB模式下,设置哑窗或全屏分辨率,标准内存中的一个或多个缓冲区被创建,控制台命令被重定向到其图形版本,设置默认调色板并启动自动屏幕刷新线程。可以使用类似QB的图形和控制台语句。

在QB-on-GUI模式下,标准内存中的一个或多个缓冲区被创建,控制台命令被重定向到其图形版本,并设置一个默认调色板.可以使用类似QB的图形和控制台语句。由用户创建一个窗口并用图形缓冲区的内容刷新它。

在OpenGL模式中,设置哑窗或全屏分辨率,标准内存中的一个或多个缓冲区被创建,并且系统的OpenGL库被初始化。从这里只能使用OpenGL命令写入图形缓冲区。QB类和控制台命令被禁止。该模式允许以便携式方式初始化OpenGL。

flags详细信息:

如果省略标志,FreeBASIC在窗口(DOS除外)模式下使用QB兼容的图形。这些常量在fbgfx.bi中定义。在-lang fb 方言中,这些常量是FBNamespace的一部分。请注意,DOS中不支持大多数标志。

可用标志:

图形模式标志
GFX_NULL:启动QB-on GUI图形模式。它创建一个图形缓冲区,但不是一个窗口。用户必须实现窗口,事件管理器,并根据需要刷新屏幕。此模式允许将FreeBASIC绘图功能与API驱动的窗口混合使用。或者,它允许处理图形(例如文件),而不会在屏幕上显示,即使在纯粹的控制台应用程序中。此标志覆盖所有其他模式标志。请参阅Windows中的GFX_NULL的例子.
GFX_OPENGL:初始化OpenGL绘制一个愚蠢的窗口。FreeBASIC图形功能无法使用。屏幕不会自动更新,必须使用Flip.此选项提供了初始化OpenGL库的便捷方式。
如果没有指定上述选项,FreeBASIC将进入仅限QB的图形模式:它创建一个缓冲区和一个哑窗口,并设置一个自动更新屏幕并管理键盘和鼠标的线程。可以使用FreeBASIC绘图功能。

窗口模式标志
如果使用GFX_NULL模式,窗口模式标志是无意义的
GFX_WINDOWED:如果支持窗口模式,FreeBASIC将在当前桌面中打开所需大小的窗口
GFX_FULLSCREEN:图形卡切换模式切换到请求模式,使用颜色深度和OS全屏模式。如果本卡中的FreeBASIC模式不可用,则切换到窗口模式。
如果未指定GFX_FULLSCREEN,则假定GFX_WINDOWED的行为。
GFX_NO_SWITCH:按Alt-Enter,防止用户更改为全屏模式或窗口模式。
GFX_NO_FRAME:创建一个没有边框的窗口。
GFX_SHAPED_WINDOW:在屏幕上绘制RGBA(255,0,05,0)的地方创建透明区域。
GFX_ALWAYS_ON_TOP:创建始终保持在顶部的窗口。

选项标记
标志在任何模式下工作,它们激活特殊行为
GFX_ALPHA_PRIMITIVES:告诉图形库可以为所有绘图图元启用Alpha通道支持。这意味着所有基元将始终使用颜色值(通过RGBA宏或&hAARRGGBB 形式的直接颜色)指定的alpha。
GFX_HIGH_PRIORITY:告诉图形库可以为图形处理启用更高的优先级。只对Win32平台上的gdiDirectX驱动程序有影响。

OpenGL Buffer flags
这些标志只能在OpenGL图形模式下工作,必须与GFX_OPENGL结合使用
GFX_STENCIL_BUFFER:强制OpenGL使用模板缓冲区
GFX_ACCUMULATION_BUFFER:强制OpenGL使用累积缓冲区
GFX_MULTISAMPLE:通过ARB_multisample扩展程序请求全屏消除锯齿

根据GFX_FULLSCREEN参数是否存在,Screen将尝试分别以全屏或窗口模式设置指定的视频模式。如果设置了全屏模式,并且系统无法在全屏模式下设置指定模式,则会以窗口模式进行尝试。如果设置了窗口模式,并且系统无法打开指定模式的窗口,则会尝试全屏。如果一切失败,Screen将不起作用,并且执行将从Screen调用之后的语句恢复。您应该注意检查图形模式是否被设置,并且相应地进行操作;检查Screen是否成功的方法是测试ScreenPtr函数的返回值;有关详细信息,请参见其页面。

图形模式控制台
控制台命令(LocatePrint)的输入可以同时使用标准QB Screen模式,也可以与扩展模式一起使用,前提是标准颜色深度不会通过使用第二个参数Screen进行修改。表格表示多种文本解析可用于文本模式时,可以使用Width请求所需的文本解析。任何字符Printed将擦除它们周围的背景;它不使用透明背景。

例子

'将屏幕模式设置为320 * 200,每像素8位
ScreenRes 320, 200, 8

'在整个屏幕上以对角线图案绘制色带
For y As Integer = 0 To 200-1
    For x As Integer = 0 To 320-1
        PSet (x,y),(x + y) And 255
    Next x
Next y

' Display the text "Hello World!!" over the lines we'画在左上角
Print "你好,世界!!"

'保持窗户打开,直到用户按下一个键
Sleep


平台差异

  • 在DOS,Windowing和OpenGL相关的开关不可用,其他问题,请参阅GfxLib概述

方言差异

  • -lang qb 方言中不可用,除非使用别名__Screenres引用。

与QB差别

  • 新的FreeBASIC

参考