2011-08-01 358 views
4

我有一个小视频应用程序,我想给类似vlc的功能。由此,我的意思是让某个元素消失并出现在鼠标移动或鼠标不移动的位置。我对如何做到这一点有一个粗略的概念,但我没有ideea如何检测鼠标是否在移动。我想过使用GetPosition函数,但这只会给我鼠标的位置,不会让我知道光标是否在移动。我想用一个计时器在鼠标停止移动后的2-3秒内倒计时,然后淡出控制系统或使其崩溃。我无法每隔1毫秒检查一次位置变量的值。有没有其他方法可以做到这一点?如何检测鼠标是否在WPF/C#中的窗口范围内移动?

回答

3

你可以使用挂钩功能,所以你会通知当鼠标移动时,我使用this免费开源库。

如何使用它:

using Gma.UserActivityMonitor.GlobalEventProvider; 

GlobalEventProvider _globalEventProvider1 = new Gma.UserActivityMonitor.GlobalEventProvider(); 

this.globalEventProvider1.MouseMove += HookMouseMove;//to listen to mouse move 
+0

感谢您的链接和库。会尝试一下,让你知道,但我不想用钩子,除非作为最后的手段。 – lorddarq

+0

我将使用这个开源库。这似乎是2的方式。 – lorddarq

+0

是的,它值得。但是请注意,如果您只想为应用程序挂钩而不是整个系统,则应该将使用WH_MOUSE_LL的行更改为WH_MOUSE,将WH_KEYBOARD_LL更改为WH_KEYBOARD,我记得它们只是一对图书馆中的线条。 –

0

捕获鼠标。如果用户实际在其他地方点击,则释放捕获。然后你可以使用标准的WPF鼠标移动事件。

myElement.MouseMove += (my MouseMove handler) 
Mouse.Capture(myElement); 
+0

我不认为捕捉鼠标是必要的,即使鼠标移动到某个其他元素上,如“MediaElement”等,PreviewMouseMove仍然会到达“Window”。或者还有其他一些情况我不考虑在这里吗? –

+0

如果你没有完成应用程序,它不会。我使用捕获,因为例如用户从应用程序中拖出一个选择。 –

+0

好的,你说得对。在这种情况下,我认为你也可以在'Window'上使用'MouseEnter' /'MouseLeave'事件。 –

相关问题