当前位置:首页 > 风云人物 > clipcursor最全的API鼠标函数

clipcursor最全的API鼠标函数

2024-02-08 08:20:32 来源:金风故事网

专题:clipcursor

鼠标类函数得到当前鼠标指针的坐标:GetCursorPos函数声明:public Type POINTAPIx As Longy As LongEnd TypePublic Declare Function GetCursorPos Lib "user32" _(lpPoint As POINTAPI) As Long 参数缺省为byref指针传递

调用:先声明一个自定义类型变量:

Dim z As POINTAPIPrivate 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)处。

[www.niubb.Net]

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 = H2Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As LongPrivate Sub Timer1_Timer()SetCursorPos 300, 20mouse_event MOUSEEVENTF_LEFTDOWN, 0 , 0 , 0 , 0 End Sub模拟鼠标移动需要设置其dx和dy参数来确定鼠标位置,这时第1个参数用MOUSEEVENTF_MOVE加上MOUSEEVENTF_ABSOLUTE组合,如下:Public Const MOUSEEVENTF_MOVE = H1Public Const MOUSEEVENTF_ABSOLUTE = H8000 mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, 65535, 65535, 0 , 0 '移动鼠标mouse_event MOUSEEVENTF_LEFTDOWN, 0 , 0 , 0 , 0 '按下鼠标这样可省去用SetCursorPos函数,不过它不以象素为度量单位,而是将长宽分别平分为65535个鼠标位置点,要注

clipcursor 最全的API鼠标函数

意。[WwW.niuBb.Net]补充说明:参数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 RECTLeft As LongTop As Long Left,Top为左上角坐标。Right As LongBottom As Long Right,Bottom为右下角坐标。End Type注:以上坐标使用的是屏幕坐标。调用如:Dim lxnRect As RECTPrivate Sub Form_Click()Static a As Booleana = Not aIf a = True Then 活动范围为Form1lxnRect.Left = Form1.Left \ Screen.TwipsPerPixelXlxnRect.Top = Form1.Top \ Screen.TwipsPerPixelYlxnRect.Right = (Form1.Left + Form1.Width) \ Screen.TwipsPerPixelXlxnRect.Bottom = (Form1.Top + Form1.Height) \ Screen.TwipsPerPixelYClipCursor lxnRectElse 活动范围为全屏幕lxnRect.Left = 0lxnRect.Top = 0lxnRect.Right = Screen.Width \ Screen.TwipsPerPixelXlxnRect.Bottom = Screen.Height \ Screen.TwipsPerPixelYClipCursor lxnRectEnd IfEnd 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 BooleanPrivate Sub Form_Click()a = Falsex = ShowCursor(a)Print xEnd Sub如果我们多次单击form窗体,则x的值会变为-1,-2,-3,-4……这时,如果再简单地把a改为true,则单击1次时指针不会重显,x的值会变为-3,-2,-1,0……只有多次单击使x等于大于0的时候,指针才会重显。

clipcursor 最全的API鼠标函数

===========================================

在VB中捕捉mouse_leave事件:SetCapture和ReleaseCapture函数SetCapture函数:设置鼠标捕获到指定窗口,使该窗口接收所有鼠标输入。(Www.niUBb.nEt]ReleaseCapture函数:释放鼠标捕获。声明:Declare Function SetCapture Lib "user32"(ByVal hwnd As Long) As LongDeclare 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 "," YDim MouseOver As BooleanMouseOver = (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 IfEnd Sub鼠标相关函数一、获得窗口外鼠标消息窗口接到“WM__LBUTTONDOWN”的消息,接着鼠标光标被移出窗口外后放开。此时程序无法取得放开按键的消息,对程序而言,鼠标的左键依 然是处于按焉的状态(其实已经放开了),这样就有可能产生程序运行上的混乱。因此,为了确保程序可以正确地取得鼠标的输入消息,需要在必要的时候以下面的 函数来设定窗口,以取得鼠标在窗口外所发出的消息HWND SetCapture(HWND hWnd);//获得窗口外的鼠标消息如果调用了上面的函数,并输和取得鼠标消息的窗口代码,那么便可取得鼠标窗口外所发出的消息,这种方法也适用于多窗口的程序,与SetCapture()函数相对应的函数为ReleaseCapture,用于释放窗口取得窗口外鼠标消息的函数.BOOL ReleaseCapture(VOID)//释放获取窗口外的函数二、设定鼠标光标的位置,在游戏设计中,有时需要设定鼠标光标的位置。如射击游戏中,玩家所操纵的飞机便追踪鼠标来进行移动。程序一开始时必须将鼠标光标设定在要让飞机出现的位置上,不然若鼠标光标开始在任意位置上,飞机也就会出现在任意的位置上,那么就不是希望出现的结果了。BOOL SetCursorPos(int x轴坐标,int y轴坐标)//但是这个坐标要是屏幕坐标。将窗口坐标转为屏幕坐标用下列的函数BOOL ClientToScreen(HWND hWND,LPPOINT 窗口坐标) //窗口坐标转换为屏幕坐标下面的程序演示如何利用ClientToScreen()函数与SetCursorPos()函数将鼠标

转载请保留本文连接:

相关内容推荐
与文章关键字相关的新闻
风云人物最新文章
精华推荐
热门图文