WPF、Winforms、およびデュアルモニタのあるウィンドウを表示する

c# multiple-monitors winforms wpf

私は2つのモニターとWPFウィンドウを起動するWinFormアプリを持っています。 WinFormがある画面を取得し、同じ画面にWPFウィンドウを表示したいのですが。 これどうやってするの?

  12  1


ベストアンサー

WPFには便利なSystem.Windows.Forms。* Screen *クラスは含まれていませんが、そのプロパティを使用してWinFormsアプリケーションでタスクを実行することはできます。

  • this はWinFormsウィンドウを意味し、 _ wpfWindow *は以下の例のWPFウィンドウを参照する定義済み変数であるとします(これは、WPFウィンドウを開くために設定したコードハンドラに含まれます。

画面screen = Screen.FromControl(this); _wpfWindow.StartupLocation = System.Windows.WindowStartupLocation.Manual; _wpfWindow.Top = screen.Bounds.Top; _wpfWindow.Left = screen.Bounds.Left; _wpfWindow.Show();

上記のコードは、WinFormsウィンドウを含む画面の左上隅にWPFウィンドウをインスタンス化します。 画面中央のような別の場所、またはWinFormsウィンドウの下と右の「カスケード」スタイルに配置する場合は、計算を任せます。

画面中央にWPFウィンドウを表示するもう1つの方法は、単に使用することです。

_wpfWIndow.StartupLocation = System.Windows.WindowStartupLocation.CenterScreen

ただし、これは、WPFウィンドウを表示する画面をマウスの位置を使用して判断するため、それほど柔軟ではありません(ユーザーがすばやく移動すると、マウスがWinFormsアプリケーションとは異なる画面に表示される可能性があります)。あなたはデフォルトのボタンを使っています。

編集: SDKへのリンクはこちら WPFウィンドウをWPF以外のウィンドウの中央に配置するためのInterOpの使用について。 それは基本的に私が数学を理解することに関して説明していたことをします、しかしあなたは正しくあなたがウィンドウのHWNDを使ってWPFウィンドウの「所有者」プロパティを設定することを可能にします。

14


これが最も簡単な方法です(WindowStartupLocation.CenterOwnerを使用)。

MyDialogWindow dialogWindow = new MyDialogWindow(); dialogWindow.Owner = this; dialogWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;

dialogWindow.ShowDialog();

interopや設定ウィンドウのコードは必要ありません:)

6


それをするもう一つの方法は:

WindowInteropHelper helper = new WindowInteropHelper(this);

this.StartupLocation = System.Windows.WindowStartupLocation.Manual; this.Left = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Left; this.Top = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Top;

これ=あなたのWPFウィンドウ…​

3


System.Windows.Forms.Screen [1]を使用してそしてフォームの画面情報を取得するために、FromControlメソッドを使用することができる必要があります。 これを使用して、検索しようとしている画面に基づいてWPFウィンドウ(上、左)を配置できます。

WinForms DLLをロードしない場合は、win32 MonitorFromRect他を使用することもできます。 しかしながら、あなたはすでにwinforms APIを持っているので、あなたはどんなメモリ/パフォーマンスヒットも払うつもりはありません。

1


タイトルとURLをコピーしました