注册 登录
编程论坛 VFP论坛

如何让 wait windows 命令 在鼠标的下方显示

easyppt 发布于 2023-07-11 23:30, 717 次点击
感觉有点难啊,是不是要先获取鼠标位置,然后根据这个位置 设置 wait window 的位置?
代码不会写。
6 回复
#2
shizi02023-07-12 00:35
Declare SHORT GetCursorPos In user32 String @
POINTAPI=Replicate(Chr(0),8)
GetCursorPos(@POINTAPI)
xPos=CToBin(Substr(POINTAPI,1,4),'4rs')
YPos=CToBin(Substr(POINTAPI,5,4),'4rs')

oForm=Iif(Type([_vfp.ActiveForm])=[O],_vfp.ActiveForm,_Screen)
yRate=oForm.Height/Wrows()
xRate=oForm.Width/Wcols()

Wait Window "("+Transform(xPos)+","+Transform(yPos)+")这里显示" At yPos/yRate,xPos/xRate
#3
吹水佬2023-07-12 06:36
WAIT WINDOW AT MROW(),MCOL()
#4
easyppt2023-07-12 08:20
感谢 :shizi0
代码有效。

吹版, AT MROW(),MCOL() 在编译的EXE里,不行,位置不对。
#5
easyppt2023-07-12 08:22
另外,发现很多WinAPI 都会用到 类似: CToBin() 这样的函数 和参数: 4rs
 由于不懂C++,所以这些 很难理解,吹版 能做些例子 讲解一下吗
#6
easyppt2023-07-12 08:55
个人理解,如错误还请指教!查看帮助文档, GetCursorPos 返回的是 鼠标位置的 结构体。
这个结构体 不是很懂,但从  shizi0  给出的代码判断: 这个结构体是 8位宽度,那就是分别 4位 代表 X坐标 和  Y坐标
返回的结构体是 二进制,需要转换,所以用了 CToBin() 函数,分别取出 X坐标 和 Y坐标

问题:这个结构体 概念很模糊,所以无法举一反三,比如类似的其他API 可能就不知道怎么理解了。
#7
sam_jiang2023-07-13 12:52
回复 6楼 easyppt
GetCursorPos 返回光标所在位置,以屏幕为参照系。
点的位置由x,y组成
但是该函数返回的是一个point结构,由pointx四个字节和pointy四个字节组成,注意大小端,也就是说是高位在后低位在前。

你可能会说,为什么要用字节来表示数字,直接返回数字不就行了吗,那时因为用字节来表示数据,有更大的容量。比如说255这个数字,直接用数字来储存要3个字节,而用字节来储存,只需要一个字节0xff(chr(255));数字越大,优势越大,比如数字4294967265,10个字节,用字节表示只有0xffffffff(chr(255)+chr(255)+chr(255)+chr(255))四个字节。

回到刚才的话题,假设上面这个函数执行成功后返回一个字符串,chr(125)+chr(0)+chr(0)+chr(0)+chr(255)+chr(0)+chr(0)+chr(0),这样你就知道这个点的位置是(125,255)。

ctobin()和bintoc()就是将字符和数字进行格式化转换的函数。

不同的结构有不同的定义,蕴含不同的数据结构。

[此贴子已经被作者于2023-7-13 12:54编辑过]

1