Skip to content

SCREENCONTROL


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

语法

vb
declare sub ScreenControl ( byval what as const long, byref param1 as long = &h80000000, byref param2 as long = &h80000000, byref param3 as long = &h80000000, byref param4 as long = &h80000000 )
declare sub ScreenControl ( byval what as const long, byref param1 as longint, byref param2 as longint = &h80000000, byref param3 as longint = &h80000000, byref param4 as longint = &h80000000 )
declare sub ScreenControl ( byval what as const long, byref param as string)

用法

vb
in the LONG (or INTEGER`<32>`) version of the sub:

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

or,

ScreenControl( what , param )

in the LONGINT (or INTEGER`<64>`) version of the sub:

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 中,它们被设置为存储在 FB 命名空间中。

以下是支持的 what 常量列表——及其编写时定义的值——以及与之关联的参数。

支持的操作

注意:

(*) 表示在尚未通过 Screen (Graphics)ScreenRes 设置图形模式时也允许的操作,

(**) 表示必须在通过 Screen (Graphics)ScreenRes 设置图形模式之前执行的操作,

对于所有其他操作,如果调用时图形模式不可用,返回值为零(0)或空字符串("``"),且操作不起作用。

获取操作

  • GET_WINDOW_POS 返回当前窗口位置(桌面坐标)。
  • (*) GET_WINDOW_TITLE 返回程序窗口的标题。
  • GET_WINDOW_HANDLE 返回程序窗口的句柄。
  • (*) GET_DESKTOP_SIZE 返回桌面大小(以像素为单位)。
  • GET_SCREEN_SIZE 返回当前屏幕大小(以像素为单位)。
  • GET_SCREEN_DEPTH 返回当前图形模式屏幕深度。
  • GET_SCREEN_BPP 返回当前图形模式每像素位数(BPP)。
  • GET_SCREEN_PITCH 返回当前图形模式帧缓冲区行间距(以字节为单位)。
  • GET_SCREEN_REFRESH 返回当前图形模式刷新率(赫兹)。
  • GET_DRIVER_NAME 返回当前图形模式驱动程序名称。
  • GET_TRANSPARENT_COLOR 返回当前图形模式深度的透明颜色值。
  • GET_VIEWPORT 返回由 View (Graphics) 语句设置的当前视口(屏幕坐标)。
  • GET_PEN_POS 返回最后的图形笔位置(屏幕坐标)。此位置用于支持使用 Step 关键字的相对坐标的图形函数。
  • GET_COLOR 返回当前图形模式颜色。
  • GET_ALPHA_PRIMITIVES 返回是否启用了图元绘制的 alpha 通道支持。
  • GET_GL_EXTENSIONS 返回包含所有支持的 GL 扩展的字符串,如果不在 OpenGL 模式下则返回空字符串。
  • GET_HIGH_PRIORITY 返回传递给 Screen (Graphics)Screenres 的标志中是否指定了 GFX_HIGH_PRIORITY
  • GET_SCANLINE_SIZE 返回当前 fbgfx 视频内存中每行在屏幕上应占用多少扫描线。
  • (*) GET_X86_MMX_ENABLED 返回是否在 X86 上启用了 MMX 特定的位图传输器。如果 MMX 已启用且可用,fbgfx 将选择 MMX 位图传输器。
  • GET_GL_COLOR_BITS 返回专用于 OpenGL 颜色缓冲区的当前位数
  • GET_GL_COLOR_RED_BITS 返回专用于 OpenGL 颜色缓冲区红色分量的当前位数
  • GET_GL_COLOR_GREEN_BITS 返回专用于 OpenGL 颜色缓冲区绿色分量的当前位数
  • GET_GL_COLOR_BLUE_BITS 返回专用于 OpenGL 颜色缓冲区蓝色分量的当前位数
  • GET_GL_COLOR_ALPHA_BITS 返回专用于 OpenGL 颜色缓冲区 alpha 分量的当前位数
  • GET_GL_DEPTH_BITS 返回专用于 OpenGL 深度缓冲区的当前位数
  • GET_GL_STENCIL_BITS 返回专用于 OpenGL 模板缓冲区的当前位数
  • GET_GL_ACCUM_BITS 返回专用于 OpenGL 累积缓冲区的当前位数
  • GET_GL_ACCUM_RED_BITS 返回专用于 OpenGL 累积缓冲区红色分量的当前位数
  • GET_GL_ACCUM_GREEN_BITS 返回专用于 OpenGL 累积缓冲区绿色分量的当前位数
  • GET_GL_ACCUM_BLUE_BITS 返回专用于 OpenGL 累积缓冲区蓝色分量的当前位数
  • GET_GL_ACCUM_ALPHA_BITS 返回专用于 OpenGL 累积缓冲区 alpha 分量的当前位数
  • GET_GL_NUM_SAMPLES 返回用于 OpenGL 多重采样的当前样本数
  • GET_GL_2D_MODE 返回当前 OpenGL 2D 渲染模式
  • GET_GL_SCALE 返回 OpenGL 2D 渲染上的当前缩放因子(仅在通过 SET_GL_2D_MODE 激活了 OpenGL 2D 渲染模式时允许)
  • SET_WINDOW_POS 设置当前程序窗口位置(桌面坐标)。
  • (*) SET_WINDOW_TITLE 设置当前程序窗口标题。等同于调用 WindowTitle( param )
  • SET_PEN_POS 设置当前图形笔位置(屏幕坐标)。此位置用于支持使用 Step 关键字的相对坐标的图形函数。
  • (*) SET_DRIVER_NAME 设置后续调用 Screen (Graphics)ScreenRes 时使用的内部图形驱动程序名称。
  • SET_ALPHA_PRIMITIVES 设置图元绘制是否应支持 alpha 通道。
  • (*) SET_GL_COLOR_BITS 设置专用于 OpenGL 颜色缓冲区的位数
  • (*) SET_GL_COLOR_RED_BITS 设置专用于 OpenGL 颜色缓冲区红色分量的位数
  • (*) SET_GL_COLOR_GREEN_BITS 设置专用于 OpenGL 颜色缓冲区绿色分量的位数
  • (*) SET_GL_COLOR_BLUE_BITS 设置专用于 OpenGL 颜色缓冲区蓝色分量的位数
  • (*) SET_GL_COLOR_ALPHA_BITS 设置专用于 OpenGL 颜色缓冲区 alpha 分量的位数
  • (*) SET_GL_DEPTH_BITS 设置专用于 OpenGL 深度缓冲区的位数
  • (*) SET_GL_STENCIL_BITS 设置专用于 OpenGL 模板缓冲区的位数
  • (*) SET_GL_ACCUM_BITS 设置专用于 OpenGL 累积缓冲区的位数
  • (*) SET_GL_ACCUM_RED_BITS 设置专用于 OpenGL 累积缓冲区红色分量的位数
  • (*) SET_GL_ACCUM_GREEN_BITS 设置专用于 OpenGL 累积缓冲区绿色分量的位数
  • (*) SET_GL_ACCUM_BLUE_BITS 设置专用于 OpenGL 累积缓冲区蓝色分量的位数
  • (*) SET_GL_ACCUM_ALPHA_BITS 设置专用于 OpenGL 累积缓冲区 alpha 分量的位数
  • (*) SET_GL_NUM_SAMPLES 设置用于 OpenGL 多重采样的样本数
  • (*) SET_X86_MMX_ENABLED 设置是否在 X86 上使用 MMX 位图传输器
  • (**) SET_GL_2D_MODE 设置 OpenGL 2D 渲染模式
  • (**) SET_GL_SCALEOpenGL 2D 渲染上应用缩放因子(仅在通过 SET_GL_2D_MODE 激活了 OpenGL 2D 渲染模式时允许)
  • POLL_EVENTS 使库轮询所有事件,即检查系统事件队列,专门用于检索键盘和鼠标事件。这对于不使用 Flip 的 OpenGL 代码最为有用,因为通常 Flip 会导致这些事件被轮询。

示例

start GeSHi

vb
'' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"

'' use FB namespace for easy access to types/constants
Using FB

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

ScreenRes 320, 200, 32
Print "Click to shake window"

'' find window coordinates
ScreenControl GET_WINDOW_POS, x0, y0

Do

    If (shakes > 0) Then
       
        '' do a shake of the window

        If (shakes > 1) Then

            '' move window to a random position near its original coordinates
            x = x0 + Int(32 * (Rnd() - 0.5))
            y = y0 + Int(32 * (Rnd() - 0.5))
            ScreenControl SET_WINDOW_POS, x, y

        Else

            '' move window back to its original coordinates
            ScreenControl SET_WINDOW_POS, x0, y0

        End If

        shakes -= 1

    End If

    If (ScreenEvent(@e)) Then
        Select Case e.Type
       
        '' user pressed the mouse button
        Case EVENT_MOUSE_BUTTON_PRESS

            If (shakes = 0) Then
                '' set to do 20 shakes
                shakes = 20

                '' find current window coordinates to shake around
                ScreenControl GET_WINDOW_POS, x0, y0
            End If

        '' user closed the window or pressed a key
        Case EVENT_WINDOW_CLOSE, EVENT_KEY_PRESS
            '' exit to end of program
            Exit Do

        End Select
    End If

    '' free up CPU for other programs
    Sleep 5

Loop

end GeSHi

start GeSHi

vb
'' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"

Dim As String driver

#ifdef __FB_WIN32__
'' set graphics driver to GDI (Windows only), before calling ScreenRes
ScreenControl FB.SET_DRIVER_NAME, "GDI"
#endif

ScreenRes 640, 480

'' fetch graphics driver name and display it to user
ScreenControl FB.GET_DRIVER_NAME, driver
Print "Graphics driver name: " & driver

'' wait for a keypress before closing the window
Sleep

end GeSHi

版本

  • fbc 1.20.0 起:GET_X86_MMX_ENABLEDSET_X86_MMX_ENABLED
  • fbc 1.10.0 起:新增了从 GET_SCANLINE_SIZEGET_GL_SCALE 的 16 个获取器。
  • fbc 1.08.0 之前:

方言差异

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

与 QB 的区别

  • FreeBASIC 新增

另请参阅

  • Screen (Graphics)
  • ScreenEvent
  • ScreenInfo
  • WindowTitle
  • View (Graphics)

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系