SCREENCONTROL
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgScreencontrol
- 最后更新: 2024-04-05
设置或获取内部图形库设置
语法
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_SCALE在 OpenGL 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
Loopend 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
Sleepend GeSHi
版本
- fbc 1.20.0 起:
GET_X86_MMX_ENABLED、SET_X86_MMX_ENABLED - fbc 1.10.0 起:新增了从
GET_SCANLINE_SIZE到GET_GL_SCALE的 16 个获取器。 - fbc 1.08.0 之前:
方言差异
- 在 -lang qb 方言中不可用,除非使用别名
__Screencontrol引用。
与 QB 的区别
- FreeBASIC 新增
另请参阅
Screen (Graphics)ScreenEventScreenInfoWindowTitleView (Graphics)
返回 目录