SCREENLOCK
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgScreenlock
- 最后更新: 2023-07-09
锁定工作页面的帧缓冲区
语法
declare sub Screenlock ( )用法
Screenlock说明
FreeBASIC 的所有图形库函数都绘制到帧缓冲区,一个自动例程在每次绘制时将帧缓冲区复制到实际屏幕内存。如果用户程序进行大量绘制,自动刷新可能会花费大量时间。
Screenlock 函数锁定自动刷新,这样在执行屏幕刷新之前可以完成多次绘制操作,从而提高执行速度,并防止用户看到部分结果。
帧缓冲区内存可以通过使用指针(参见 ScreenPtr)自由访问,但只有在屏幕锁定时才能这样做。图元图形语句(Line、PSet、Draw String……)可以在任何时候使用。
屏幕刷新保持锁定状态,直到使用 Screenunlock 语句,它会恢复刷新。
对 Screenlock 的调用必须与对 Screenunlock 的匹配调用配对。图形驱动程序使用计数器跟踪 Screenlock 被调用的次数。只有第一次调用 Screenlock 才会实际执行锁定操作。后续对 Screenlock 的调用只会增加计数器。相反,Screenunlock 只会减少锁定计数器,直到达到零时才会执行实际解锁操作。使用 Screen (Graphics) 或 Screenres 将在更改屏幕模式之前释放所有锁并将锁定计数器重置为零。
强烈建议页面上的锁尽可能短时间保持。锁定屏幕时只应进行屏幕绘制,必须避免输入/输出和等待。在 Win32 和 Linux 中,屏幕锁定是通过停止同时处理操作系统事件的线程来实现的。如果屏幕长时间保持锁定,事件队列可能会溢出并使系统不稳定。当引起的锁定时间过长时,优先使用双缓冲方法(使用 Screencopy)。
自动刷新只在帧缓冲区的可见页面上发生。当绘制到可见页面以外的页面时,Screenlock 没有效果。
示例
start GeSHi
vb
'' Draws a circle on-screen at the mouse cursor
Dim As Long mx, my
Dim As String key
ScreenRes 640, 480, 32
Do
'process
GetMouse(mx, my)
key = Inkey()
'draw
ScreenLock()
Cls()
Circle (mx, my), 8, RGB(255, 255, 255)
ScreenUnlock()
'free up CPU time
Sleep(18, 1)
Loop Until key = Chr(27) Or key = Chr(255, 107)end GeSHi
平台差异
- 在 DOS 中,屏幕锁定时鼠标箭头不会对鼠标移动做出反应
方言差异
- 在 -lang qb 方言中不可用,除非使用别名
__Screenlock引用。
与 QB 的区别
- FreeBASIC 新增
另请参阅
Screen (Graphics)- 设置模式Screenres- 设置模式ScreenunlockScreenptr
返回 目录