SCREENUNLOCK
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgScreenunlock
- 最后更新: 2023-07-09
解锁工作页面的帧缓冲区
语法
` declare sub Screenunlock ( byval startline as long = -1, byval endline as long = -1 )
`
用法
` Screenunlock [ start_line ] [, end_line ]
`
参数
startline
可选参数,指定要更新的第一个屏幕行。若省略,则默认为屏幕顶行。
endline
可选参数,指定要更新的最后一个屏幕行。若省略,则默认为屏幕底行。
说明
Screenunlock 解锁当前工作页面(假定之前已通过调用 Screenlock 锁定),并让系统恢复定期更新屏幕。当指定 start_line 和 end_line 时,仅认为这两行之间的屏幕区域发生了变化,并对该区域进行更新。
内部存在一个计数器用于记录屏幕锁定状态,因此 Screenunlock 只对已锁定的屏幕有效。未通过 Screenlock 锁定的屏幕无法被解锁,但 Screenunlock 仍会强制更新指定区域或整个屏幕。
Screenunlock 的调用必须与 Screenlock 的调用配对使用。只有第一次调用 Screenlock 才会真正执行锁定操作,后续调用 Screenlock 只会递增锁定计数器。相反,Screenunlock 只会递减锁定计数器,直到计数归零时才执行实际的解锁操作。使用 Screen(图形) 或 Screenres 将在切换屏幕模式前释放所有锁并将锁定计数器重置为零。
所有图形语句在调用前会自动锁定屏幕,调用结束后自动解锁,因此通常无需使用 Screenlock 和 Screenunlock 显式操作。只有在希望直接通过 Screenptr 访问屏幕(帧缓冲区),或希望将多个图形语句合并以使其效果同时显示在屏幕上(从而避免屏幕更新期间可能出现的闪烁)时,才需要锁定屏幕。
警告(Win32、Linux):屏幕锁定通过停止同时处理操作系统事件的线程来实现。这意味着屏幕锁定时间应尽量短,仅限于重绘所需的时间,且在屏幕锁定期间不会接收用户输入。当强制锁定时间过长时,建议优先使用双缓冲方法(配合 Screencopy)。
示例
参见 Screenptr 示例。
方言差异
- 在 -lang qb 方言中不可用,除非使用别名
__Screenunlock引用。
与 QB 的差异
- FreeBASIC 新增内容。
另请参阅
Screen(图形)ScreenlockScreenptr
返回 目录