2010-10-12 3 views
0

J'ai une application WPF qui a plusieurs contrôles WindowsFormsHost. J'essaie de suivre la position de la souris à l'intérieur de mon application lorsqu'elle est agrandie en mode plein écran. Si l'utilisateur place la souris près de l'écran supérieur, j'aimerais afficher une fenêtre avec des menus supplémentaires.Suivi des mouvements de souris WPF au milieu de plusieurs contrôles WindowsFormsHost

Je peux utiliser:

  • Window.PreviewMouseMove
  • InputManager.PreProcessInput, ou même
  • HwndSource.FromHwnd (WindowInteropHelper (mainWindow) .Handle) .AddHook (...)

recevoir des événements de déplacement tant que la souris ne se déplace pas sur un WindowsFormsHost (si l'utilisateur le fait, je ne reçois pas d'événement). Je pense que le problème racine est parce que WPF utilise un HWND distinct pour chaque WindowsFormsHost.

Existe-t-il un bon moyen de suivre les mouvements de la souris dans mon application sans devoir rechercher manuellement chaque WindowsFormsHost et s'abonner à ses événements de déplacement de la souris? Je voudrais également éviter un écouteur global de la souris Windows si possible.

Répondre

0

Je ne pense pas qu'il existe une bonne solution en plus d'utiliser un hook global de la souris comme décrit here avec une fonction comme Visual.PointFromScreen pour traduire la coordonnée de l'écran global à une coordonnée locale de l'application.

Questions connexes