GetMouse
 
检索鼠标指针设备的状态

语法

Declare Function GetMouse ( ByRef x As Integer, ByRef y As Integer, ByRef wheel As Integer = 0, ByRef buttons As Integer = 0, ByRef clip As Integer = 0 ) As Integer

用法

result = GetMouse (x , y [, [ wheel ] [, [ buttons ] [, [ clip ]]]])

参数

x
x坐标值
y
y坐标值
wheel
滚轮值
buttons
按钮状态
clip
剪辑状态

返回值

0成功,或1错误(例如因为鼠标在图形窗口之外)或失败。(sets a runtime error)

说明

GetMouse检索鼠标位置和按钮状态;通过引用传递给此函数的变量返回信息。如果鼠标不可用,则所有变量都将包含-1值。

如果在控制台模式下,x y 坐标是鼠标当前所在的字符单元坐标;屏幕的左上角位于坐标0, 0.如果鼠标移出控制台窗口,GetMouse返回鼠标所在窗口上的最后一个坐标。如果在控制台模式和全屏模式下,不返回滚轮值。

如果在图形模式下,x y 将始终以相对于屏幕左上角的像素坐标返回,在这种情况下为0,0;通过ViewWindow设置的自定义坐标系不影响GetMouse返回的坐标。
如果鼠标从图形窗口中运行,则所有值都将设置为-1,并且该函数的返回值设置为1.如果功能的返回值未被测试,这可能会导致按钮和滚轮的误解。

Wheel 是鼠标轮计数器;将车轮远离您的方向使计数增加,向您转动车轮使其减小。在程序启动时或通过Screen设置新的图形模式时,轮位置将重置为0。FreeBASIC可能不总是支持给定平台的鼠标滚轮,在这种情况下,始终返回0。

Buttons 将按钮状态存储为位掩码:如果鼠标左键失败,则设置位0;如果鼠标右键关闭,则设置位1;如果鼠标中键/滚轮关闭,则位2被置位。

Clip 存储鼠标剪切状态;如果1,鼠标当前被剪切到图形窗口;如果0,鼠标未剪切。

例子

Dim As Integer x, y, buttons, res 
'设置视频模式并进入循环
ScreenRes 640, 480, 8
Do
    '获取鼠标x,y和按钮。放弃车轮位置。
    res = GetMouse (x, y, , buttons)
    Locate 1, 1
    If res <> 0 Then ''失败

#ifdef __FB_DOS__
        Print "鼠标或鼠标驱动程序不可用"
#else
        Print "鼠标不可用或不在窗口上"
#endif

    Else
        Print Using "鼠标位置:###:###按钮:"; x; y;
        If buttons And 1 Then Print "L";
        If buttons And 2 Then Print "R";
        If buttons And 4 Then Print "M";
        Print ""
    End If
Loop While Inkey = ""
End

'示例2:类型联合类型结构
Type mouse
    As Integer res
    As Integer x, y, wheel, clip
    Union
        buttons As Integer
        Type
            Left:1 As Integer
            Right:1 As Integer
            middle:1 As Integer
        End Type
    End Union
End Type
 
Screen 11
Dim As mouse m

Do
    m.res = GetMouse( m.x, m.y, m.wheel, m.buttons, m.clip )
    ScreenLock
    Cls
    Print Using "res =#"; m.res
    Print Using "x = ###; y = ###; wheel = + ###; clip = ##"; m.x; m.y; m.wheel; m.clip
    Print Using "按钮= ##;左=#;中间=#;右=#"; m.buttons; m.left; m.middle; m.right
    ScreenUnlock
    Sleep 10, 1
Loop While Inkey = ""


方言差异

  • 除非使用别名__Getmouse引用,否则不适用于-lang qb 方言。传递的变量也必须为,而不是整数.

平台差异

  • 在Win32上,不能保证在全屏控制台模式下检测到滚轮更改。
  • 在DOS中,“剪辑”值无关。此外,除了鼠标驱动程序的支持和启用之外,车轮和中间按钮将不起作用。另见FaqDOS。

与QB差别

  • 新的FreeBASIC

参考