2012-12-12 6 views
9

In meinem WPF/C# app bin Erstellen ich ein Dialogfenster wie das unten mit Code:Set Window.Owner hWnd mit

Window dialog = new MyDialog() as Window; 
dialog.Owner = Window.GetWindow(this); 
dialog.ShowDialog(); 

Wie kann ich den Dialog Eigentümer an den hWnd eines anderen Anwendungen Fenster gesetzt?

Die Funktionalität, die ich brauche, ist nur, um das "Besitzer-Fenster" zu blockieren, während der Dialog sichtbar ist.

Antwort

9

ich gefunden habe, eine Lösung, die die "Owner Window" zu blockieren. Der erste Teil des Codes ist von Douglas Antwort, der Rest wird einen Aufruf an die WinAPI EnableWindow Methode:

Window dialog = new MyDialog(); 
WindowInteropHelper wih = new WindowInteropHelper(dialog); 
wih.Owner = ownerHwnd; 

//Block input to the owner 
Windows.EnableWindow(ownerHwnd, false); 

EventHandler onClosed = null; 
onClosed = (object sender, EventArgs e) => 
{ 
    //Re-Enable the owner window once the dialog is closed 
    Windows.EnableWindow(ownerHwnd, true); 

    (sender as Window).closed -= onClosed; 
}; 

dialog.Closed += onClosed; 
dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner; 
dialog.ShowActivated = true; 
dialog.Show(); 

//Import the EnableWindow method 
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool EnableWindow(IntPtr hWnd, bool bEnable); 
14

Verwendung WindowInteropHelper:

Window dialog = new MyDialog(); 
WindowInteropHelper wih = new WindowInteropHelper(dialog); 
wih.Owner = ownerHwnd; 
dialog.ShowDialog(); 
+1

Dies arbeitet daran, den Eigentümer zu setzen, aber leider ist es nicht eine Benutzereingabe an das Fenster blockieren. Gibt es eine Möglichkeit, das zu tun? – Drahcir