VBA里,如何获取鼠标坐标?

VBA里,如何获取鼠标坐标?,第1张

Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long\x0d\x0a\x0d\x0aType POINTAPI\x0d\x0aX As Long\x0d\x0aY As Long\x0d\x0aEnd Type\x0d\x0a\x0d\x0aPublic Function getmouse_x_y() As POINTAPI\x0d\x0aGetCursorPos getmouse_x_y\x0d\x0a\x0d\x0aEnd Function\x0d\x0a\x0d\x0asub test()\x0d\x0a'call getmouse_x_y '调用“获取鼠标坐标值过程”(假定你们给的过程/程序,名叫getmouse_x_y)\x0d\x0aif getmouse_x_y.x>100 and getmouse_x_y.y>100 then ?? '根据返回当前鼠标的坐标值执行某过程/程序\x0d\x0a??\x0d\x0aend sub

VBA讲的是逻辑,那么从逻辑上来说

单元格的位置可以作为坐标来反馈,故可以使用Cells(Selection.Row, Selection.Column)来确定当前光标所处的坐标,但这仅仅局限于一个单元格,cells(r,c)分别为行号和列号,通过坐标来判断光标所处位置。同样的,如果用cells(r,c+1)则可以 *** 作光标所处单元格的右数1个单元格的属性,并且在 *** 作右侧单元格时光标依然在当前的单元格上,所以如果下一条命令是cells(r+1,c)则可 *** 作下方相邻单元格,举个例子就是如果cells(r,c)是A1,cells(r,c+1)就是B1,cells(r+1,c)是A2.

那么只要让textbox的值 = Cells(Selection.Row, Selection.Column).Value 即=cells(r,c)的值,就可以让textbox显示出当前光标所处单元格的值。也就是无论你光标移动到哪里,窗体都能显示出光标所处的单元格的值

最后,你提到的“右击”,VBA无法判断左击还是右击,但无论你怎么击都属于“选中 or 激活”这个 *** 作,所以 ......无论你左击还是右击某个单元格,Cells(Selection.Row, Selection.Column)都能指出当前激活单元格的坐标。

想要获取鼠标坐标并不容易,还是一样需要调用两个API函数GetCursorPos() 获取鼠标指针位置(屏幕坐标)然后采用ScreenToClient() 将鼠标指针位置转换为窗口坐标输出即可。上例子。

// 程序名称:通过 API 获取鼠标状态

//

#include <graphics.h>

#include <stdio.h>

void main()

{

initgraph(640, 480) // 初始化绘图窗口

HWND hwnd = GetHWnd() // 获取绘图窗口句柄

POINT point

TCHAR s[10]

while(true)

{

GetCursorPos(&point) // 获取鼠标指针位置(屏幕坐标)

ScreenToClient(hwnd, &point)// 将鼠标指针位置转换为窗口坐标

// 获取鼠标按键状态可以用 GetAsyncKeyState 函数,这里不再详述。

// 输出鼠标坐标

sprintf(s, _T("%05d"), point.x)

outtextxy(0, 0, s)

sprintf(s, _T("%05d"), point.y)

outtextxy(0, 20, s)

// 适当延时

Sleep(10)

}

}

同样运行环境需要安装EasyX。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/12158025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存