屏幕 鼠标移动事件

mydear303 2010-08-19 10:04:04
如何获取电脑屏幕的鼠标事件,类似窗体有MouseMove事件,那屏幕的MouseMove事件什么获取?

我想做的功能:无边框的form窗体移动功能,窗体顶有一个toolStrip控件(类似有边框窗体的标题栏),
toolStrip控件有MouseMove事件,但只要我移动的速度快,鼠标就会离开toolStrip控件(也就是离开窗体,MouseMove事件就无效),现在若能获取电脑屏幕的鼠标MouseMove事件好就好办

有做过的朋友说一下如何获取电脑屏幕的鼠标MouseMove事件,非常感谢

是屏幕 鼠标移动事件,不是窗体的鼠标移动事
...全文
479 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mydear303 2010-08-19
  • 打赏
  • 举报
回复


public FmMessage()
{
InitializeComponent();

this.Capture = true;//设置
}

#region 移动窗口
Point mousePoint; // 窗体的屏幕坐标
Point formPoint;
private void toolStrip1_MouseDown(object sender, MouseEventArgs e)
{
this.Capture = true;
}
private void FmMessage_MouseDown(object sender, MouseEventArgs e)
{
mousePoint = Control.MousePosition;
formPoint = this.Location;
}
private void FmMessage_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
this.Location = new Point(mousePos.X - mousePoint.X + formPoint.X, mousePos.Y - mousePoint.Y + formPoint.Y);
}
}
#endregion


感谢各位进来朋友的关注和支持,根据 16# 的说法得到一个解决方案,虽然还不是很好,但能随意移动了

结贴给分了,各位万福!!!!!
zhifengfeng 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mydear303 的回复:]
C# code
Point mousePoint; // 窗体的屏幕坐标
Point formPoint;
private void toolStrip1_MouseDown(object sender, MouseEventArgs e)
{
mousePoint = Control.MousePo……
[/Quote]
另外你也可以到谷歌上找找
dai78 2010-08-19
  • 打赏
  • 举报
回复
你可到微软编程论坛问一下
dancingbit 2010-08-19
  • 打赏
  • 举报
回复
设置Form的Capture属性为true,可以捕获鼠标事件。
mydear303 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 porschev 的回复:]
引用 6 楼 mydear303 的回复:
引用 4 楼 porschev 的回复:
比如说移到页面哪个部分。。给这个部分绑定上movsemove事件。。

得到鼠标的X,Y坐标。。存下。。

鼠标的X,Y坐标在不断变化。。你也不断把它与比较你存下来刚进来时X,Y(加,减)

再进行你要的判断了。。


比如说移到页面哪个部分。。给这个部分绑定上movsemove事件。。
……
[/Quote]

哎,我是做winform滴 ,好伤心
mydear303 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 luyexinzong 的回复:]
直接调用WinAPI来获得鼠标在电脑屏幕上的位置就行了,或者用系统钩子监视鼠标移动消息也可以。然后自定义一个事件,如果鼠标位置发生了变化就执行你想要的操作,摒弃C#内建的鼠标移动事件不就行了。
[/Quote]

谢谢,都用到系统钩子了,好有压力,无边框窗体移动还真难搞,能直接在有边框窗体上直接加几个按钮就好了
porschev 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mydear303 的回复:]
引用 4 楼 porschev 的回复:
比如说移到页面哪个部分。。给这个部分绑定上movsemove事件。。

得到鼠标的X,Y坐标。。存下。。

鼠标的X,Y坐标在不断变化。。你也不断把它与比较你存下来刚进来时X,Y(加,减)

再进行你要的判断了。。


比如说移到页面哪个部分。。给这个部分绑定上movsemove事件。。

你说的这个就是关键,速度快鼠标就会离开窗体……
[/Quote]

用JS写看看。。。。应该不会这么快消失吧。。。。
luyexinzong 2010-08-19
  • 打赏
  • 举报
回复
直接调用WinAPI来获得鼠标在电脑屏幕上的位置就行了,或者用系统钩子监视鼠标移动消息也可以。然后自定义一个事件,如果鼠标位置发生了变化就执行你想要的操作,摒弃C#内建的鼠标移动事件不就行了。
mydear303 2010-08-19
  • 打赏
  • 举报
回复
        Point mousePoint; // 窗体的屏幕坐标
Point formPoint;
private void toolStrip1_MouseDown(object sender, MouseEventArgs e)
{
mousePoint = Control.MousePosition;
formPoint = this.Location;
}

private void toolStrip1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
this.Location = new Point(mousePos.X - mousePoint.X + formPoint.X, mousePos.Y - mousePoint.Y + formPoint.Y);
}
}


上面代码是用 toolStrip控件 代替有边框窗体的标题栏,但移动速度快就没用
mydear303 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 huangwanhai 的回复:]
让事件持久一点
假如鼠标移动过去了的话
比如你要显示下拉框
就让下拉框在鼠标移出后3秒再消失
[/Quote]

方法应该行得通,但不符合我的要求,谢谢
huangwanhai 2010-08-19
  • 打赏
  • 举报
回复
让事件持久一点
假如鼠标移动过去了的话
比如你要显示下拉框
就让下拉框在鼠标移出后3秒再消失
mydear303 2010-08-19
  • 打赏
  • 举报
回复
有做过的朋友说一下,有更好的办法或资料也跟我说说,说白了就是无边框窗体的移动事件,
求:1、如果能有代码让我在有边框的窗体上自己加自己的按钮,(窗体自带的最大化,最小化,关闭按钮全换成我自己的铵键)
2、不用1,我想获取窗体最大化,最小化按钮的事件,当我点最大化时,我想窗体变大到一定的大小,但不要最大,当我点最小化,不要最小化到任务栏,只要让窗体变小,并定位在一定的位置,这最大化,最小化的事件是哪个?

写的比较多,求助
mydear303 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 porschev 的回复:]
比如说移到页面哪个部分。。给这个部分绑定上movsemove事件。。

得到鼠标的X,Y坐标。。存下。。

鼠标的X,Y坐标在不断变化。。你也不断把它与比较你存下来刚进来时X,Y(加,减)

再进行你要的判断了。。
[/Quote]

比如说移到页面哪个部分。。给这个部分绑定上movsemove事件。。


你说的这个就是关键,速度快鼠标就会离开窗体,那我要绑定哪个的movsemove事件?
所以我就想找屏幕的movsemove事件才能解决
mydear303 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 porschev 的回复:]
关键是哪个点开始触发这个事件?

你总得要一个开始点吧。。。。
[/Quote]

当一个窗体加载后,我按下toolStrip控件(引发toolStrip1_MouseDown,我做一个会标识),这个时候当鼠标在电脑屏幕移动时,我想获取屏幕的移动事件,这样实现窗体的移动。
如果用toolStrip1_MouseMove事件的话,只要鼠标移动快,鼠标就会离开toolStrip1,这样toolStrip1_MouseMove会失效
porschev 2010-08-19
  • 打赏
  • 举报
回复
比如说移到页面哪个部分。。给这个部分绑定上movsemove事件。。

得到鼠标的X,Y坐标。。存下。。

鼠标的X,Y坐标在不断变化。。你也不断把它与比较你存下来刚进来时X,Y(加,减)

再进行你要的判断了。。
mydear303 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jayinit 的回复:]
获取当前鼠标坐标,计算位置变化,就可以判断移动了吗
[/Quote]

获取当前鼠标坐标 -- 这个没问题
计算位置变化,就可以判断移动了 -- 是啥意思?事件如何获取?像你说的“计算位置变化”这些操作写在什么事件里?
porschev 2010-08-19
  • 打赏
  • 举报
回复
关键是哪个点开始触发这个事件?

你总得要一个开始点吧。。。。
  • 打赏
  • 举报
回复
获取当前鼠标坐标,计算位置变化,就可以判断移动了吗

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧