2010-04-08 3 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를 이용한다. WindowInteropHelper에

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

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

+1

다행 이군! –

+0

이것은 .NET 4에서는 작동하지만 .NET 3.5에서는 작동하지 않습니다. .NET 3.5에서는 WindowInteropHelper의 Owner 속성을 변경해도 아무런 효과가 없습니다. 아무도 이유와 해결 방법을 알고 있습니까? –

1

을하는 방법에 대한 SetParent()? WPF 창을 Windows Form의 MDI 하위로 만들 때 작동합니다.

+3

내 WPF 윈도우가 더 기능 setParent가 불려 갔을 때이 없다(). – Sam