Skip to content

SCREENEVENT


查询并检索系统事件。

语法

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
Loop

end GeSHi

平台差异

  • 在 DOS 版本中,Screenevent 不返回与窗口相关的事件,但会返回输入事件。

方言差异

与 QB 的区别

  • FreeBASIC 新增

另请参阅

返回 目录

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