ScreenControl
 
设置或获取内部图形库设置

语法

Declare Sub ScreenControl ( ByVal what As Integer, ByRef param1 As Integer = 0, ByRef param2 As Integer = 0, ByRef param3 As Integer = 0, ByRef param4 As Integer = 0 )
Declare Sub ScreenControl ( ByVal what As Integer, ByRef param As String =
"" )

用法

ScreenControl( what [, [ param1 ][, [ param2 ][, [ param3 ][, [ param4 ]]]]] )
or,
ScreenControl( what [, param ] )

参数

what
指定要执行的功能
param1
可选的第一个整数参数,包含要在条目上设置的值或退出时获取的值
param2
可选的第二个整数参数,包含要在入口处设置的值或退出时获取的值
param3
可选的第三个整数参数,包含要在入口处设置的值或退出时获取的值
param4
可选的第四个整数参数,包含要在入口处设置的值或退出时获取的值
param
可选字符串参数,包含要在条目上设置的文本或退出时的文本

说明


此函数可用于设置或获取内部GfxLib状态。what 参数指定要执行的操作。在设置状态的操作中,param* 参数必须包含要设置的值。在获取状态的操作中,当函数返回时,param* 将保存GfxLib返回的值。
param* 参数的含义取决于what 参数,其可能的值在fbgfx.bi中定义为常量。在lang fb 中,它们被设置为存储在FBNamespace中。
以下是支持的what 常量的列表以及它们在写入时定义的值以及与它们相关联的参数。

支持的操作
注意:*表示通过屏幕(图形)ScreenRes尚未设置图形模式时允许的操作。对于所有其他操作,返回值为零(0)或空字符串("")),如果图形模式在通话时间不可用,则操作无效。

获取操作
  • GET_WINDOW_POS0)以桌面坐标返回当前窗口位置。
[OUT] param1 x
[OUT] param2 y
  • * GET_WINDOW_TITLE1)返回程序窗口的标题。
[OUT]param 标题
  • GET_WINDOW_HANDLE2)返回程序窗口的句柄。
[OUT]param1 句柄;这是Windows中的HWND,X11中是“Window”XID
  • * GET_DESKTOP_SIZE3)返回桌面大小(以像素为单位)。
[OUT]param1 宽度
[OUT]param2 身高
  • GET_SCREEN_SIZE4)返回当前屏幕大小(以像素为单位)。
[OUT]param1 宽度
[OUT]param2 高度
  • GET_SCREEN_DEPTH5)返回当前图形模式屏幕深度。
[OUT]param1 个像素
  • GET_SCREEN_BPP6)返回当前图形模式BPP。
[OUT]param1 个像素
  • GET_SCREEN_PITCH7)以字节返回当前图形模式帧缓冲区间距。
[OUT]param1 音调
  • GET_SCREEN_REFRESH8)以赫兹为单位返回当前图形模式刷新率。
[OUT]param1
  • GET_DRIVER_NAME9)返回当前的图形模式驱动程序名称。
[OUT]param 名称
  • GET_TRANSPARENT_COLOR10)返回当前图形模式深度的透明颜色值。
[OUT]param1
  • GET_VIEWPORT11)返回屏幕坐标中由视图(图形)语句设置的当前视口。
[OUT] param1 x1
[OUT] param2 y1
[OUT] param3 x2
[OUT] param4 y2
  • GET_PEN_POS12)以屏幕坐标返回最后一个图形笔位置。该位置用于使用Step关键字支持相对坐标的图形功能。
[OUT] param1 x
[OUT] param2 y
  • GET_COLOR13)返回当前的图形模式颜色。
[OUT]param1 前景
[OUT]param2 背景
  • GET_ALPHA_PRIMITIVES14)如果启用了alpha通道的原始图形支持,则返回。
-1TRUE-1)如果启用了字母基元FALSE0
  • GET_GL_EXTENSIONS15)返回一个包含所有支持的GL扩展名的字符串,如果不是OpenGL模式,则返回空字符串。
[OUT]param ??支持的GL扩展
  • GET_HIGH_PRIORITY16)如果传递给ScreenScreenRes的标志中指定GFX_HIGH_PRIORITY,则返回。
[OUT]param1 启用更高优先级的图形处理

设置操作
  • SET_WINDOW_POS100)以桌面坐标设置当前程序窗口位置。
[IN] param1 x
[IN] param2 y
  • * SET_WINDOW_TITLE101)设置当前的程序窗口标题。这相当于调用WindowTitle( param ).
[IN]param 标题
  • SET_PEN_POS102)以屏幕坐标设置当前图形笔位置。该位置用于使用Step关键字支持相对坐标的图形功能。
[IN] param1 x
[IN] param2 y
  • * SET_DRIVER_NAME103)设置在ScreenScreenRes的后续调用中使用的内部图形驱动程序的名称。
[IN]param 驱动程序名称
  • SET_ALPHA_PRIMITIVES104)设置原始图形是否应该符合alpha通道。
[IN]param1 已启用
  • * SET_GL_COLOR_BITS105)设置专用于OpenGL颜色缓冲区的位数
[IN]param1
  • * SET_GL_COLOR_RED_BITS106)设置专用于OpenGL颜色缓冲区的红色分量的位数
[IN]param1
  • * SET_GL_COLOR_GREEN_BITS107)设置专用于OpenGL颜色缓冲区的绿色分量的位数
[IN]param1
  • * SET_GL_COLOR_BLUE_BITS108)设置专用于OpenGL颜色缓冲区的蓝色分量的位数
[IN]param1
  • * SET_GL_COLOR_ALPHA_BITS109)设置专用于OpenGL颜色缓冲区的alpha分量的位数
[IN]param1
  • * SET_GL_DEPTH_BITS110)设置专用于OpenGL深度缓冲区的位数
[IN]param1
  • * SET_GL_STENCIL_BITS111)设置专用于OpenGL模板缓冲区的位数
[IN]param1
  • * SET_GL_ACCUM_BITS112)设置专用于OpenGL累加缓冲区的位数
[IN]param1
  • * SET_GL_ACCUM_RED_BITS113)设置专用于OpenGL累加缓冲区的红色分量的位数
[IN]param1
  • * SET_GL_ACCUM_GREEN_BITS114)设置专用于OpenGL累加缓冲区的绿色分量的位数
[IN]param1
  • * SET_GL_ACCUM_BLUE_BITS115)设置专用于OpenGL累加缓冲区的蓝色分量的位数
[IN]param1
  • * SET_GL_ACCUM_ALPHA_BITS116)设置专用于OpenGL累加缓冲区的alpha分量的位数
[IN]param1
  • * SET_GL_NUM_SAMPLES117)设置要用于OpenGL多重采样的样本数
[IN]param1 样本

其他操作
  • POLL_EVENTS200)导致库轮询所有事件,即检查系统事件队列,专门用于检索键盘和鼠标事件。这对于不使用Flip的OpenGL代码最有用,因为通常Flip将导致轮询这些事件。

例子

''包含一些有用的定义的fbgfx.bi
#include "fbgfx.bi"

''使用FB命名空间来轻松访问类型/常量
Using FB

Dim e As EVENT
Dim As Integer x0, y0, x, y
Dim As Integer shakes = 0
Dim As Any Ptr img

ScreenRes 320, 200, 32
Print "点击来摇动窗口"

''找到窗口坐标
ScreenControl GET_WINDOW_POS, x0, y0

Do

    If (shakes > 0) Then
        
        ''做一个窗户的摇晃

        If (shakes > 1) Then

            ''将窗口移动到其原始坐标附近的随机位置
            x = x0 + Int(32 * (Rnd() - 0.5))
            y = y0 + Int(32 * (Rnd() - 0.5))
            ScreenControl SET_WINDOW_POS, x, y

        Else

            ''将窗口移回其原始坐标
            ScreenControl SET_WINDOW_POS, x0, y0

        End If

        shakes -= 1

    End If

    If (ScreenEvent(@e)) Then
        Select Case e.type
        
        ''用户按下鼠标按钮
        Case EVENT_MOUSE_BUTTON_PRESS

            If (shakes = 0) Then
                ''设置做20摇
                shakes = 20

                ''找到当前的窗口坐标来摇摆
                ScreenControl GET_WINDOW_POS, x0, y0
            End If

        ''用户关闭窗口或按下一个键
        Case EVENT_WINDOW_CLOSE, EVENT_KEY_PRESS
            ''退出程序结束
            Exit Do

        End Select
    End If

    ''为其他程序释放CPU
    Sleep 5

Loop


''包含一些有用的定义的fbgfx.bi
#include "fbgfx.bi"

Dim As String driver

#ifdef __FB_WIN32__
''在调用ScreenRes之前将图形驱动程序设置为GDI(仅限Win32)
ScreenControl FB.SET_DRIVER_NAME, "GDI"
#endif

ScreenRes 640, 480

''获取图形驱动程序名称并将其显示给用户
ScreenControl FB.GET_DRIVER_NAME, driver
Print "图形驱动程序名称:" & driver

''在关闭窗口之前等待按键
Sleep


方言差异

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

与QB差别

  • 新的FreeBASIC

参考