在多个WindowsFormsHost控件中跟踪WPF鼠标移动

时间:2010-10-12 16:48:19

标签: wpf mouse winforms-interop

我有一个WPF应用程序,它有几个WindowsFormsHost控件。在全屏模式下最大化时,我正在尝试跟踪应用程序内部的鼠标位置。如果用户将鼠标放在顶部屏幕附近,我想显示一个带有附加菜单的窗口。

我可以使用:

  • Window.PreviewMouseMove
  • InputManager.PreProcessInput,甚至
  • HwndSource.FromHwnd(WindowInteropHelper(mainWindow).Handle).AddHook(...)

只要鼠标不移动到WindowsFormsHost上就可以接收移动事件(如果用户这样做,我就不会收到事件)。我认为根本问题是因为WPF为每个WindowsFormsHost使用单独的HWND。

是否有一种很好的方法可以跟踪我的应用程序中的鼠标移动,而无需手动查找每个WindowsFormsHost并订阅其鼠标移动事件?如果可能的话,我也想避免使用全局Windows鼠标监听器。

1 个答案:

答案 0 :(得分:0)

除了使用here概述的全局鼠标钩子以及像Visual.PointFromScreen这样的函数将全局屏幕坐标转换为应用程序本地坐标之外,我认为没有一个好的解决方案。