0

複数の WindowsFormsHost コントロールを持つ WPF アプリケーションがあります。アプリケーションがフルスクリーン モードで最大化されているときに、アプリケーション内のマウスの位置を追跡しようとしています。ユーザーがマウスをトップ画面の近くに置いた場合、追加のメニューを含むウィンドウを表示したいと思います。

使うことができます:

  • Window.PreviewMouseMove
  • InputManager.PreProcessInput、または
  • HwndSource.FromHwnd(WindowInteropHelper(mainWindow).Handle).AddHook(...)

マウスが WindowsFormsHost の上を移動しない限り、移動イベントを受信します (ユーザーがこれを行った場合、イベントは受信されません)。根本的な問題は、WPF が WindowsFormsHost ごとに個別の HWND を使用しているためだと思います。

各 WindowsFormsHost を手動で見つけてそのマウス移動イベントをサブスクライブすることなく、アプリケーション全体でマウスの動きを追跡する良い方法はありますか? 可能であれば、グローバルな Windows マウス リスナーも避けたいと思います。

4

1 に答える 1

0

ここで概説されているグローバル マウス フックをVisual.PointFromScreenのような関数と共に使用して、グローバル スクリーン座標をアプリケーション ローカル座標に変換する以外に、良い解決策はないと思います。

于 2010-10-12T19:08:11.197 に答える