Подтвердить что ты не робот

Как установить окно Wpf как владельца формы Winforms

Как установить System.Windows.Window в качестве владельца System.Windows.Forms.Form?

После того, как я некоторое время искал это, только чтобы понять, что у меня уже есть ответ в одном из моих классов utils, я решил поставить ответ на stackoverflow. Надеюсь, кто-то найдет это полезным.

4b9b3361

Ответ 1

Не SetParent считается "более правильным", чем SetWindowLong с GWL_HWDPARENT (-8)?

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

Ответ 2

Используйте этот метод:

[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());
}