2010-04-08 13 views
13

Ich möchte WPF-Fenster in einer älteren Win32-Anwendung verwenden. Ich möchte sie auf eine ähnliche Weise verhalten, wie das WPF-Fenster immer über dem Win32-Fenster angezeigt wird.Wie Win32-Fenster als Besitzer von WPF-Fenster festlegen?

Dafür würde ich gerne den Besitzer des WPF-Fensters auf die Win32-Fenster setzen, aber ich hatte keine Ahnung, wie dies zu erreichen ist.

Irgendwelche Hilfe hier?

Da die Antwort hinter einem Link verbirgt, hier den Code ein, den Trick:

System::Windows::Interop::WindowInteropHelper^ helper = gcnew System::Windows::Interop::WindowInteropHelper(myWpfChildWindow); 
helper->Owner = (System::IntPtr)myMainWindowHWND; 

Antwort

13

Dieser Artikel zeigt, wie Sie die Handles für beide erhalten und das WPF-Fenster zu einem transparenten Overlay für das win32-Fenster machen.

http://blogs.microsoft.co.il/blogs/tamir/archive/2007/04/11/Transparent-WPF-control-over-unmanaged-window-handle.aspx

Dieser Artikel verwendet eine WindowInteropHelper ähnliche Funktionalität zu erreichen.

http://blogs.msdn.com/wpfsdk/archive/2007/04/03/centering-wpf-windows-with-wpf-and-non-wpf-owner-windows.aspx

MSDN-Seite auf WindowInteropHelper:

http://msdn.microsoft.com/en-us/library/system.windows.interop.windowinterophelper.aspx

Hoffnung, dass Ed

+1

Ja, der zweite Artikel hat den Trick gemacht, kurz die folgenden Zeilen: System :: Windows :: Interop :: WindowInteropHelper^helfer = gcnew System :: Windows :: Interop :: WindowInteropHelper (myWpfChildWindow); helper-> Besitzer = (System :: IntPtr) myMainWindowHWND; – Sam

+1

Froh, dass es funktioniert hat! –

+0

Dies funktioniert auf .NET 4, aber nicht auf .NET 3.5. In .NET 3.5 hat das Ändern der Owner-Eigenschaft von WindowInteropHelper keine Auswirkungen. Weiß jemand warum, und ein Workaround? –

1

Wie wäre es SetParent()? Ich weiß funktioniert, wenn Sie ein WPF-Fenster ein MDI Child eines Windows-Formulars erstellen.

+3

Meine WPF-Fenster hat keine Funktion SetParent hilft(). – Sam