Affichage d'une fenêtre avec des moniteurs WPF, Winforms et Dual
J'ai 2 moniteurs et une application WinForm qui lance une fenêtre WPF. Je veux obtenir l'écran que le WinForm est sur, et de montrer la fenêtre WPF sur le même écran. Comment puis-je faire cela?
source d'informationauteur NotDan
Vous devez vous connecter pour publier un commentaire.
WPF ne comprend pas le Système pratique.De Windows.Les formulaires.Écran classe, mais vous pouvez toujours utiliser ses propriétés pour accomplir votre tâche dans votre application WinForms.
Supposer que ce signifie que les WinForms fenêtre et _wpfWindow est définie par une variable fait référence à la Fenêtre WPF dans l'exemple ci-dessous (ce serait dans quel gestionnaire de code de vous définir pour ouvrir la Fenêtre WPF, à l'instar de certains boutons.Cliquez sur gestionnaire):
Le code ci-dessus va instancier la Fenêtre WPF dans le coin Supérieur Gauche de l'écran contenant votre WinForms Fenêtre. Je vous laisse le calcul pour vous si vous souhaitez le placer dans un autre endroit comme le centre de l'écran ou dans une "cascade" de style ci-dessous et à droite de votre WinForms Fenêtre.
Une autre méthode qui obtient la Fenêtre WPF dans le milieu de l'écran serait de tout simplement utiliser
Cependant, ce n'est pas assez souple, car il utilise la position de la souris pour déterminer l'écran pour afficher la Fenêtre WPF (et, évidemment, la souris peut être sur un autre écran que votre WinForms application si l'utilisateur se déplace rapidement, ou vous utilisez un bouton par défaut, ou quoi que ce soit).
Edit: Voici un lien vers un document SDK sur l'utilisation de l'Interopérabilité pour obtenir votre Fenêtre WPF centré sur la non-Fenêtre WPF. Il n'en fait ce que j'avais décrit en termes d'essayer de comprendre les mathématiques, mais correctement vous permet de définir la Fenêtre WPF est "Propriétaire" de la propriété en utilisant le HWND de la Fenêtre.
Voici la façon la plus simple (utilise WindowStartupLocation.CenterOwner).
Pas besoin d'interopérabilité ou de la fenêtre de réglage de la coords 🙂
Une autre façon de le faire est:
ce = votre Fenêtre WPF...
Vous devriez être en mesure d'utiliser le Système.De Windows.Les formulaires.L'écran [1], et l'utilisation de la FromControl méthode pour obtenir l'écran d'info pour la forme. Vous pouvez ensuite l'utiliser pour le positionnement de la fenêtre WPF (en haut, à gauche) en fonction de l'écran que vous essayez de le localiser sur.
[1] Vous pouvez également utiliser le win32 MonitorFromRect et al, si vous n'avez pas à charger les WinForms dll. Cependant, puisque vous avez déjà reçu les winforms API, vous n'allez pas payer toute la mémoire/perf frappé.