2009-07-08 13 views
11

Wie wird ein System.Windows.Window als Besitzer einer System.Windows.Forms.Form festgelegt?Festlegen eines Wpf-Fensters als Besitzer eines Winforms-Formulars

Nachdem ich eine Weile nach diesem gesucht habe, nur um festzustellen, dass ich bereits die Antwort in einem meiner utils Klassen habe, entschied ich mich, die Antwort auf stackoverflow zu setzen. Hoffentlich findet das jemand nützlich.

Antwort

7

Ist das nicht SetParent als "richtig" als SetWindowLong mit GWL_HWDPARENT (-8)?

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

Dies funktionierte gut für mich das WPF-Fenster als übergeordnetes Win32-Dialogfeld festlegen. – SliverNinja

12

Verwenden Sie diese Methode:

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

Hinweis: Verwenden Sie SetWindowLongPtr, um Code zu schreiben, der mit 32-Bit- und 64-Bitversion von Windows kompatibel ist. Beim Kompilieren für 32-Bit-Windows wird SetWindowLongPtr als Aufruf der SetWindowLong-Funktion definiert. – Dave

Verwandte Themen