检索鼠标指针设备的状态
语法
用法
result = GetMouse (x , y [, [ wheel ] [, [ buttons ] [, [ clip ]]]])
参数
x
x坐标值
y
y坐标值
wheel
滚轮值
buttons
按钮状态
clip
剪辑状态
返回值
说明
GetMouse检索鼠标位置和按钮状态;通过引用传递给此函数的变量返回信息。如果鼠标不可用,则所有变量都将包含
-1值。
如果在控制台模式下,
x 和
y 坐标是鼠标当前所在的字符单元坐标;屏幕的左上角位于坐标
0, 0.如果鼠标移出控制台窗口,
GetMouse返回鼠标所在窗口上的最后一个坐标。如果在控制台模式和全屏模式下,不返回滚轮值。
如果在图形模式下,
x 和
y 将始终以相对于屏幕左上角的像素坐标返回,在这种情况下为0,0;通过
View或
Window设置的自定义坐标系不影响
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 = ""
方言差异
平台差异
- 在Win32上,不能保证在全屏控制台模式下检测到滚轮更改。
- 在DOS中,“剪辑”值无关。此外,除了鼠标驱动程序的支持和启用之外,车轮和中间按钮将不起作用。另见FaqDOS。
与QB差别
参考