`

鼠标类函数

    博客分类:
  • vb
阅读更多

得到当前鼠标指针的坐标:GetCursorPos函数
声明:
public Type POINTAPI
x As Long
y As Long
End Type
Public Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long 参数缺省为byref指针传递
调用:先声明一个自定义类型变量: Dim z As POINTAPI
Private Sub Timer1_Timer()
GetCursorPos z 注:这里z是引用地址传递,其值改变,就象"返回值"
Label1.Caption = z.x
Label2.Caption = z.y
End Sub
参数lpPoint返回鼠标在屏幕上坐标(不限于程序窗体),如将鼠标指针移到屏幕左上角时,z.x=0,z.y=0,而鼠标移到屏幕右下角时,z.x=639;z.y=477
===========================================================
设置鼠标在屏幕上的坐标 : SetCursorPos函数
声明:
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
调用如:Private Sub Command1_Click()
Call SetCursorPos(600, 100) 将鼠标定位到屏幕(600,100)处。
End Sub
很简单,注:屏幕是以象素为单位的(与屏幕分辨率设定有关)。不是缇。
==========================================================
自动按下鼠标按纽:mouse_event过程函数
该过程能在程序中模拟手工按下或抬起鼠标,移动鼠标的操作,声明:
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
一般只用它的第1个参数,指明按下或抬起哪个按纽,如果要模拟鼠标移动,则要用到第2,3个参数dx和dy, 而最后面两个参数始终不用。
第1个参数dwFlags的可能设置值如下:
MOUSEEVENTF_LEFTDOWN=&H2: 模拟鼠标左键按下
MOUSEEVENTF_LEFTUP :模拟鼠标左键抬起
MOUSEEVENTF_RIGHTDOWN: 模拟鼠标右键按下
MOUSEEVENTF_RIGHTUP :模拟鼠标右键抬起
MOUSEEVENTF_ABSOLUTE=&H8000: 由参数dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
MOUSEEVENTF_MOVE=&H1 :移动鼠标
调用如:在屏幕上指定位置按下鼠标左键:
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Sub Timer1_Timer()
SetCursorPos 300, 20
mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0&
End Sub
模拟鼠标移动需要设置其dx和dy参数来确定鼠标位置,这时第1个参数用MOUSEEVENTF_MOVE加上MOUSEEVENTF_ABSOLUTE组合,如下:
Public Const MOUSEEVENTF_MOVE = &H1
Public Const MOUSEEVENTF_ABSOLUTE = &H8000
mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, 65535, 65535, 0&, 0& '移动鼠标
mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& '按下鼠标
这样可省去用SetCursorPos函数,不过它不以象素为度量单位,而是将长宽分别平分为65535个鼠标位置点,要注意。
补充说明:
参数dx-- Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动
参数dy-- Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动
==============================================
限制鼠标活动区域函数:ClipCursor函数
限制光标只能在参数lpRect给出的矩形区域内运动。声明:
Public Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
参数lpRect声明为RECT型,RECT的声明如下:
Public Type RECT
Left As Long
Top As Long Left,Top为左上角坐标。
Right As Long
Bottom As Long Right,Bottom为右下角坐标。
End Type
注:以上坐标使用的是屏幕坐标。
调用如:
Dim lxnRect As RECT
Private Sub Form_Click()
Static a As Boolean
a = Not a
If a = True Then 活动范围为Form1
lxnRect.Left = Form1.Left \ Screen.TwipsPerPixelX
lxnRect.Top = Form1.Top \ Screen.TwipsPerPixelY
lxnRect.Right = (Form1.Left + Form1.Width) \ Screen.TwipsPerPixelX
lxnRect.Bottom = (Form1.Top + Form1.Height) \ Screen.TwipsPerPixelY
ClipCursor lxnRect
Else 活动范围为全屏幕
lxnRect.Left = 0
lxnRect.Top = 0
lxnRect.Right = Screen.Width \ Screen.TwipsPerPixelX
lxnRect.Bottom = Screen.Height \ Screen.TwipsPerPixelY
ClipCursor lxnRect
End If
End Sub
上例是这样的,在窗体上单击时,鼠标活动限在此窗体,再单击,则恢复为全屏幕活动范围。
注:在VB中,所有尺寸都化为缇了(包括screen对象的width,height),而在API中,所有尺寸都为象素,因此,要统一单位,用转换比例screen对象的TwipsPerPixelX和TwipsPerPixelY(好象值就等于15。不知是否固定不变。)
======================================
显示/隐藏鼠标指针:ShowCursor函数
该函数可用于隐藏鼠标,但鼠标仍然可"看不见地移动"。声明:
Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
参数很简单:bShow--当为true且"函数"返回值大于等于0时,显示指针,当为false且"函数"返回值小于0时,隐藏指针。
注:该函数的函数返回值需要注意:它返回"显示计数",windows维持着一个内部显示计数;倘若bShow为TRUE,那么每调用一次这个函数,计数就会递增1;反之,如bShow为FALSE,则计数递减1。只有在这个计数大于或等于0的情况下,指针才会显示出来。而小于0时则隐藏,因此,不单是简单地把bShow设为false就可以了。不然要想再使指针显示出来,可能会遇到困难。如:
Dim a As Boolean
Private Sub Form_Click()
a = False
x = ShowCursor(a)
Print x
End Sub
如果我们多次单击form窗体,则x的值会变为-1,-2,-3,-4……这时,如果再简单地把a改为true,则单击1次时指针不会重显,x的值会变为-3,-2,-1,0……只有多次单击使x等于大于0的时候,指针才会重显。
===========================================
在VB中捕捉mouse_leave事件:SetCapture和ReleaseCapture函数
SetCapture函数:设置鼠标捕获到指定窗口,使该窗口接收所有鼠标输入。
ReleaseCapture函数:释放鼠标捕获。
声明:
Declare Function SetCapture Lib "user32"(ByVal hwnd As Long) As Long
Declare Function ReleaseCapture Lib "user32"() As Long
参数:hwnd--要接收所有鼠标输入的窗口句柄。
调用如(捕捉command2的mouseleave"事件":
Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = X & "," & Y
Dim MouseOver As Boolean
MouseOver = (0 <= X) And (X <= Command2.Width) And (0 <= Y) And (Y <= Command2.Height) 这里要注意,一个控件的mouse类事件返回的X,Y坐标值是此控件自身的窗口坐标,不是Form的坐标!所以左上角都是(0,0)-右下角(width,height).
If MouseOver Then 当鼠标在command2上时,
Command2.BackColor = RGB(255, 255, 0)
SetCapture Command2.hwnd 使command2窗口响应鼠标输入。
Else 当鼠标离开时,以下写mouseleave的内容。
Command2.BackColor = RGB(120, 120, 120)
ReleaseCapture command2不再响应鼠标动作
End If
End Sub

分享到:
评论

相关推荐

    Qt 基于QGraphicsItem类重载鼠标事件函数的教训

    在开发一个基于Qt的项目,如一个简单的俄罗斯方块游戏时,我们可能会遇到需要对图形元素进行交互的需求,这时候就需要重载`QGraphicsItem`类的鼠标事件函数。本文将深入探讨这个主题,以避免在实际开发中重复遇到...

    C语言利用钩子函数来实现鼠标操作

    ### C语言利用钩子函数实现鼠标操作详解 #### 一、钩子机制概述 Windows操作系统是基于事件驱动的,这意味着几乎所有交互操作都是通过消息传递来完成的。钩子(Hooks)是在这一机制之上的一种特殊机制,它允许...

    Axure元件函数窗口函数鼠标函数和数字函数的介绍.pdf

    本文主要探讨了四个关键函数类别:元件函数、窗口函数、鼠标函数以及数字函数,这些都是构建动态原型时不可或缺的功能。 元件函数主要用于获取和操作元件的各种属性。例如,Widget.Width和Widget.Height分别用于...

    钩子函数屏蔽鼠标键盘

    钩子函数在Windows编程中特别常见,通过注册钩子,开发者可以监控系统级的行为,如键盘、鼠标的输入事件,窗口创建和销毁等。本篇将详细讲解如何利用钩子函数来制作登录界面,屏蔽鼠标键盘,并覆盖桌面。 首先,...

    VC++鼠标光标函数

    VC++ 鼠标光标函数详解 在VC++中,MFC提供了多种处理鼠标和光标的函数,以下是相关知识点的详细解释: 一、获取系统标准光标 在VC++中,可以使用AfxGetApp()-&gt;LoadStandardCursor(IDC_SIZENS)函数获取系统标准...

    利用钩子函数键盘鼠标键盘事件

    这使得开发人员可以监控、修改或控制系统的某些行为,比如在这个例子中,我们要讨论的是如何利用钩子函数来监听和处理键盘及鼠标事件。 键盘和鼠标事件是用户与计算机进行交互的基本方式,通过监听这些事件,开发者...

    几个TC中的鼠标函数

    这个函数很方便 只要在while中添加就可 其中mx,my是鼠标的坐标 还有点击的返回值 1是右键单击,2是左键单击,3是两件一块按下,4是左键按下,5是右键按下;

    CListCtrl的主要事件及鼠标响应函数

    ### CListCtrl 主要事件及鼠标响应函数详解 CListCtrl 控件是 Windows MFC (Microsoft Foundation Classes) 库中的一个重要组成部分,它提供了一种灵活的方式来展示和管理列表形式的数据。在开发过程中,掌握如何...

    C# 鼠标钩子 监测鼠标双击事件

    - 鼠标钩子是Windows API(应用程序接口)提供的一种机制,允许程序注册一个回调函数(Hook Procedure),当特定类型的鼠标事件发生时,系统会调用这个函数。 - 在C#中,通常使用`SetWindowsHookEx`函数来设置全局...

    易语言鼠标钩子例程

    它接受一个钩子类型(在这里是鼠标钩子),一个钩子处理函数地址,一个模块句柄以及一个线程ID,用于指定钩子将在哪个线程中运行。在易语言中,你需要定义这个函数并传入相应的参数来设置鼠标钩子。 2. **...

    mfc 实现 鼠标消息的响应

    在实现鼠标消息的响应时,我们需要使用LoadCursor函数来加载不同的光标,并使用SetCursor函数来设置当前的光标。同时,我们也可以使用GetCursor函数来获取当前的光标。 在MFC中,还有许多其他的消息可以被处理,...

    用Qt使用按键模拟函数和鼠标模拟函数实现网页刷新 示例 demo

    Qt使用鼠标模拟函数mouse_event和按键模拟函数keybd_even实现网页刷新功能 https://blog.csdn.net/qq_29542611/article/details/83421552

    用C语言编写的鼠标函数

    该资源为BC环境下运行的鼠标函数,已通过编译,可嵌合在程序中直接运行

    【计算机图形学课程】02.MFC鼠标响应函数模拟画图软件1

    在类向导中,选择对应的类(如`CMousePicView`)并为不同的鼠标消息添加相应的函数,例如`OnLButtonDown()`和`OnLButtonUp()`。 在`OnLButtonDown()`函数中,记录下鼠标点击的初始位置`CPoint point`,并将一个布尔...

    模拟鼠标移动轨迹

    例如,某些应用可能会检测到非物理鼠标的活动并阻止它们,或者需要管理员权限才能执行这类操作。因此,在开发相关功能时,必须考虑到这些限制,并遵循最佳实践,避免滥用。 总之,模拟鼠标移动轨迹是IT领域中的一个...

    易语言模拟鼠标移动

    除了`SetCursorPos`,在易语言中还有其他一些与鼠标操作相关的函数,如`GetCursorPos`用于获取当前鼠标的位置,` mouse_event`用于模拟鼠标点击和滚动等。模拟鼠标点击通常会结合`mouse_event`函数来实现,例如模拟...

    鼠标、光标控制函数.zip_光标_控制鼠标_鼠标

    这些API提供了许多函数来实现光标和鼠标的控制功能。 1. **光标控制**: - `SetCursorPos(x, y)`: 这个函数可以用来设置光标的位置,其中`x`和`y`分别代表屏幕上的横纵坐标。 - `LoadCursor(hInstance, idCursor)...

    matlab模拟鼠标操作库,功能全面

    例如,可能有一个`click`函数用于模拟鼠标单击,一个`doubleClick`函数用于模拟双击,还有一个`dragDrop`函数用于执行拖曳操作。这些函数可能会使用Java的低级事件模拟机制,使得模拟操作尽可能地接近真实的用户行为...

    PinTu_matlab画板_matlab_鼠标控制_GUI_matlab画板_

    MATLAB的回调函数是关键,它们会在特定事件发生时被调用,例如,鼠标点击事件可以用来设置绘图起点,鼠标移动事件可以用来绘制线条,鼠标释放事件则完成绘制。 4. **绘图函数**:MATLAB提供了多种绘图函数,如`plot...

Global site tag (gtag.js) - Google Analytics