ScreenEvent
 
查询并检索系统事件。

语法

Declare Function ScreenEvent ( ByVal event As Any Ptr = 0 ) As Integer

用法

result = ScreenEvent( [ event ] )

参数

event
指定函数应存储事件数据的缓冲区。

返回值

如果有待检索的事件0,则返回-1.

说明

此函数从内部GfxLib事件队列返回最新的可用系统事件。“事件”是指任何鼠标或键盘活动,例如。

事件数据(如果可用)将被复制到缓冲区中指向应该被声明为Event

查询事件
如果有待检索的事件0,则该函数返回-1.如果event 参数设置为0(如果省略,则为默认值)ScreenEvent将无法复制事件数据,并且不会将其从内部事件队列中取出。以这种方式调用函数可以有助于检查是否有未处理的事件,而无需实际获取它们。

{999796001}Note{999796002}
如果您收到KEY_PRESS,KEY_RELEASE或KEY_REPEAT事件,则不会清除键盘缓冲区。如果您在接收到事件后需要清除缓冲区,则需要手动清除。见Inkey.


例子

''包含一些有用的定义的fbgfx.bi
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using fb ''常量和结构存储在lang fb中的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 "未知键";
            End If
            Print "被按下(scancode" & e.scancode & ")"
        Case EVENT_KEY_RELEASE
            If (e.ascii > 0) Then
                Print "'" & e.ascii & "'";
            Else
                Print "未知键";
            End If
            Print "被释放(scancode" & e.scancode & ")"
        Case EVENT_KEY_REPEAT
            If (e.ascii > 0) Then
                Print "'" & e.ascii & "'";
            Else
                Print "未知键";
            End If
            Print "正在重复(scancode" & e.scancode & ")"
        Case EVENT_MOUSE_MOVE
            Print "鼠标移动到" & e.x & "," & e.y & "(三角洲" & e.dx & "," & e.dy & ")"
        Case EVENT_MOUSE_BUTTON_PRESS
            If (e.button = BUTTON_LEFT) Then
                Print "剩下";
            ElseIf (e.button = BUTTON_RIGHT) Then
                Print "对";
            Else
                Print "中间";
            End If
            Print "按钮"
        Case EVENT_MOUSE_BUTTON_RELEASE
            If (e.button = BUTTON_LEFT) Then
                Print "剩下";
            ElseIf (e.button = BUTTON_RIGHT) Then
                Print "对";
            Else
                Print "中间";
            End If
            Print "按钮发布"
        Case EVENT_MOUSE_DOUBLE_CLICK
            If (e.button = BUTTON_LEFT) Then
                Print "剩下";
            ElseIf (e.button = BUTTON_RIGHT) Then
                Print "对";
            Else
                Print "中间";
            End If
            Print "按钮双击"
        Case EVENT_MOUSE_WHEEL
            Print "鼠标滚轮移动到位置" & e.z
        Case EVENT_MOUSE_ENTER
            Print "鼠标移动到程序窗口中"
        Case EVENT_MOUSE_EXIT
            Print "鼠标移出程序窗口"
        Case EVENT_WINDOW_GOT_FOCUS
            Print "程序窗口得到了重点"
        Case EVENT_WINDOW_LOST_FOCUS
            Print "程序窗口丢失焦点"
        Case EVENT_WINDOW_CLOSE
            End
        Case EVENT_MOUSE_HWHEEL
            Print "水平鼠标滚轮移动到位置" & e.w
        End Select
    End If

    Sleep 1
Loop


平台差异

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

方言差异

与QB差别

  • 新的FreeBASIC

参考