vb 获取鼠标在窗口内的屏幕坐标

哪位大大帮我写个函数,3Q了问题1:PublicFunctionGetCursorScreenWindowPos(ByValHwnd)AsPOINTAPIDimrAsRE... 哪位大大帮我写个函数,3Q了
问题1:
Public Function GetCursorScreenWindowPos(ByVal Hwnd) As POINTAPI
Dim r As RECT, p As POINTAPI
GetWindowRect Hwnd, r
GetCursorPos p
GetCursorScreenWindowPos.X = p.X - r.Left
GetCursorScreenWindowPos.Y = p.Y - r.Top
'...我不知道这里要怎么写,才不会有超出的问题
End Function

问题2:
上面是获取屏幕坐标,我想在写一个捕捉鼠标进入窗口或某个控件的事件

进入的话就返回ture,否则false,封装成函数更好.最好解释一下用法
问题2补充,是任意窗口.不仅仅是获取自身窗口那么简单,别看错了...

好的话我再追加50.大大们快来啊...
展开
 我来答
匿名用户
2012-07-14
展开全部
看到你的问题补充就不知道你想要写成什么样子的了。
给你两段代码把。

一、获取鼠标在屏幕上的坐标
'坐标显示在Text1,Text2.
'建一个Timer1,Text1,Text2.
'代码如下。
'============
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim p As POINTAPI
Private Sub Form_Load()
Timer1.Interval = 10
End Sub

Private Sub Timer1_Timer()
GetCursorPos p
Text1.Text = p.x
Text2.Text = p.y
End Sub

二、获取鼠标在窗体内的坐标
'坐标显示在标题上
'运行此程序需要再窗体添加控件Timer
Option Explicit
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Form_Load()
Timer1.Interval = 10 '设置获取鼠标坐标间隔
End Sub

Private Sub Timer1_Timer()
Dim P As POINTAPI
GetCursorPos P '获取鼠标在屏幕中的位置
ScreenToClient Me.hwnd, P '转换为本窗体的坐标
Dim t As Boolean
t = P.x >= 0 And P.y >= 0 And P.x < Me.Width / Screen.TwipsPerPixelX And P.y <= Me.Height / Screen.TwipsPerPixelY
If t Then Me.Caption = "x=" & P.x & "y=" & P.y '按像素显示坐标
'If t Then Me.Caption = "x=" & P.x * Screen.TwipsPerPixelX & "y=" & P.y * Screen.TwipsPerPixelY '按缇显示坐标
End Sub
更多追问追答
追问
我的问题2是想写个函数,函数功能是当鼠标进入我指定的窗体句柄后.返回真假值.如果进入返回真,不在窗口内的话返回假.
追答
'添加Command1
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "你的鼠标在按钮上了"
End Sub
170******19
2019-01-14 · TA获得超过3894个赞
知道大有可为答主
回答量:3147
采纳率:33%
帮助的人:175万
展开全部
'运行此程序需要再窗体添加控件timer
option
explicit
private
declare
function
getcursorpos
lib
"user32"
(lppoint
as
pointapi)
as
long
private
declare
function
screentoclient
lib
"user32"
(byval
hwnd
as
long,
lppoint
as
pointapi)
as
long
private
type
pointapi
x
as
long
y
as
long
end
type
private
sub
form_load()
timer1.interval
=
10
'设置获取鼠标坐标间隔
end
sub
private
sub
timer1_timer()
dim
p
as
pointapi
getcursorpos
p
'获取鼠标在屏幕中的位置
screentoclient
me.hwnd,
p
'转换为本窗体的坐标
dim
t
as
boolean
t
=
p.x
>=
0
and
p.y
>=
0
and
p.x
<
me.width
/
screen.twipsperpixelx
and
p.y
<=
me.height
/
screen.twipsperpixely
if
t
then
me.caption
=
"x="
&
p.x
&
"y="
&
p.y
'按像素显示坐标
'if
t
then
me.caption
=
"x="
&
p.x
*
screen.twipsperpixelx
&
"y="
&
p.y
*
screen.twipsperpixely
'按缇显示坐标
end
sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nakalamornima
2012-07-14 · TA获得超过384个赞
知道小有建树答主
回答量:1571
采纳率:0%
帮助的人:273万
展开全部
讲一下很久以前的设计思路
1、首先取得全屏的大小。
2、不可能获取任意窗口,因为不同的系统和软件的限制。
3、找出看得见的窗口的句柄,求出窗口大小。
4、综上所述建立一个限制算法。
5、其它的由你了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夺命精神病
2012-07-14
知道答主
回答量:17
采纳率:0%
帮助的人:6.2万
展开全部
不太清楚哦,希望有人帮解答,祝:早日找到答案!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式