SCREENEVENT
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgScreenevent
- 最后更新: 2022-06-07
查询并检索系统事件。
语法
declare function ScreenEvent ( byval event as any ptr = 0 ) as long用法
result = ScreenEvent( [ event ] )参数
event
指定函数应存储事件数据的缓冲区。
返回值
如果有待检索的待处理事件则返回 -1,否则返回 0。
说明
此函数从内部 GfxLib 事件队列返回最新的可用系统事件。所谓"事件",例如指任何鼠标或键盘活动。
事件数据(如果可用)将被复制到应声明为 Event 的缓冲区指针中。
在 Event 页面上,查看事件类型列表及如何使用其关联字段(另见下面的示例)。
查询事件
如果有待检索的待处理事件,函数返回 -1,否则返回 0。如果 event 参数设置为 0(省略时的默认值),ScreenEvent 将无法复制事件数据,也不会将其从内部事件队列中出队。以这种方式调用该函数可用于检查是否有待处理事件,而无需实际获取它们。
注意
如果收到 KEY_PRESS、KEY_RELEASE 或 KEY_REPEAT 事件,不会清除键盘缓冲区。如果需要在收到事件后清除缓冲区,需要手动清除。参见 Inkey。
示例
start GeSHi
vb
'' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using fb '' constants and structures are stored in the FB namespace in lang fb
#endif
Dim e As EVENT
ScreenRes 640, 480
Do
If (ScreenEvent(@e)) Then
Select Case e.Type
Case EVENT_KEY_PRESS
If (e.scancode = SC_ESCAPE) Then
End
End If
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "unknown key";
End If
Print " was pressed (scancode " & e.scancode & ")"
Case EVENT_KEY_RELEASE
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "unknown key";
End If
Print " was released (scancode " & e.scancode & ")"
Case EVENT_KEY_REPEAT
If (e.ascii > 0) Then
Print "'" & e.ascii & "'";
Else
Print "unknown key";
End If
Print " is being repeated (scancode " & e.scancode & ")"
Case EVENT_MOUSE_MOVE
Print "mouse moved to " & e.x & "," & e.y & " (delta " & e.dx & "," & e.dy & ")"
Case EVENT_MOUSE_BUTTON_PRESS
If (e.button = BUTTON_LEFT) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "right";
Else
Print "middle";
End If
Print " button pressed"
Case EVENT_MOUSE_BUTTON_RELEASE
If (e.button = BUTTON_LEFT) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "right";
Else
Print "middle";
End If
Print " button released"
Case EVENT_MOUSE_DOUBLE_CLICK
If (e.button = BUTTON_LEFT) Then
Print "left";
ElseIf (e.button = BUTTON_RIGHT) Then
Print "right";
Else
Print "middle";
End If
Print " button double clicked"
Case EVENT_MOUSE_WHEEL
Print "mouse wheel moved to position " & e.z
Case EVENT_MOUSE_ENTER
Print "mouse moved into program window"
Case EVENT_MOUSE_EXIT
Print "mouse moved out of program window"
Case EVENT_WINDOW_GOT_FOCUS
Print "program window got focus"
Case EVENT_WINDOW_LOST_FOCUS
Print "program window lost focus"
Case EVENT_WINDOW_CLOSE
End
Case EVENT_MOUSE_HWHEEL
Print "horizontal mouse wheel moved to position " & e.w
End Select
End If
Sleep 1
Loopend GeSHi
平台差异
- 在 DOS 版本中,
Screenevent不返回与窗口相关的事件,但会返回输入事件。
方言差异
- 在 -lang qb 方言中不可用。
与 QB 的区别
- FreeBASIC 新增
另请参阅
返回 目录