2010-04-08 131 views
13

我想在传统的win32应用程序中使用WPF窗口。 我想以类似的方式表现它们,比如WPF窗口总是显示在win32窗口之上。如何将Win32窗口设置为WPF窗口的所有者?

为此,我想将WPF窗口的所有者设置为win32窗口,但我不知道如何实现此目的。

这里有什么帮助吗?

由于答案背后的一些链接,这里隐藏该诀窍代码:

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

回答

13

本文将展示如何获取这两个句柄以及如何使WPF窗口变为透明的win32窗口覆盖图。

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

本文使用WindowInteropHelper来实现类似的功能。

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

上WindowInteropHelper MSDN页:

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

希望帮助, 埃德

+1

是的,第二篇文章诀窍,简称以下几行: System :: Windows :: Interop :: WindowInteropHelper^helper = gcnew System :: Windows :: Interop :: WindowInteropHelper(myWpfChildWindow); helper-> Owner =(System :: IntPtr)myMainWindowHWND; – Sam 2010-04-08 13:35:59

+1

很高兴你能工作! – 2010-04-08 15:58:08

+0

这适用于.NET 4,但不适用于.NET 3.5。在.NET 3.5上,更改WindowInteropHelper的Owner属性不起作用。有谁知道为什么,以及解决方法? – 2013-04-11 21:47:01

1

如何SetParent()?我知道在将WPF窗口设置为Windows窗体的MDI子项时可行。

+3

我的WPF窗口没有任何功能的setparent()。 – Sam 2010-04-08 13:27:34

相关问题