System.Windows.WindowをSystem.Windows.Forms.Formの所有者として設定する方法はありますか。Winformsフォームの所有者としてWpfウィンドウを設定する方法
これをしばらく検索した後、私はすでに私のutilsクラスの1つに答えがあることを理解するために、私はその答えをstackoverflowに置くことにしました。うまくいけば、誰かがこれが役に立つと思うでしょう。
System.Windows.WindowをSystem.Windows.Forms.Formの所有者として設定する方法はありますか。Winformsフォームの所有者としてWpfウィンドウを設定する方法
これをしばらく検索した後、私はすでに私のutilsクラスの1つに答えがあることを理解するために、私はその答えをstackoverflowに置くことにしました。うまくいけば、誰かがこれが役に立つと思うでしょう。
はGWL_HWDPARENT
(-8)とSetWindowLong
よりも "より正しい" と考えSetParent
はありませんか?
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
このメソッドを使用:
[DllImport("user32.dll")]
private static extern int SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);
/// <summary>
/// sets the owner of a System.Windows.Forms.Form to a System.Windows.Window
/// </summary>
/// <param name="form"></param>
/// <param name="owner"></param>
public static void SetOwner(System.Windows.Forms.Form form, System.Windows.Window owner)
{
WindowInteropHelper helper = new WindowInteropHelper(owner);
SetWindowLong(new HandleRef(form, form.Handle), -8, helper.Handle.ToInt32());
}
注32ビット版と64ビット版の両方のWindowsと互換性のあるコードを記述するには、SetWindowLongPtrを使用します。 32ビットWindows用にコンパイルする場合、SetWindowLongPtrはSetWindowLong関数の呼び出しとして定義されます。 – Dave
これは、Win32ダイアログの親としてWPFウィンドウを設定するのにはうまくいきました。 – SliverNinja