如何将Win32窗口设置为WPF窗口的所有者?

Sam*_*Sam 15 wpf winapi owner

我想在传统的win32应用程序中使用WPF窗口.我想以类似的方式表现它们,就像WPF窗口始终显示在win32窗口之上.

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

这里有什么帮助?

由于答案隐藏在一些链接后面,这里的代码就是诀窍:

System::Windows::Interop::WindowInteropHelper^ helper = gcnew System::Windows::Interop::WindowInteropHelper(myWpfChildWindow);
helper->Owner = (System::IntPtr)myMainWindowHWND;
Run Code Online (Sandbox Code Playgroud)

Ed *_*lez 14

本文介绍如何获取两者的句柄以及如何使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

希望有所帮助,Ed

  • 找出原因:在.NET 3.5中,在窗口的事件处理程序中设置所有者为时已晚.您必须在构建后立即在创建窗口的代码中进行设置..NET 4.0似乎更宽松,允许您从OnSourceInitialized()中设置窗口的所有者. (2认同)