2010-04-08 38 views
13

Tôi muốn sử dụng các cửa sổ WPF trong ứng dụng win32 cũ. Tôi muốn xử lý chúng theo cách tương tự, như cửa sổ WPF luôn được hiển thị trên đầu cửa sổ win32.Cách đặt cửa sổ Win32 làm chủ sở hữu cửa sổ WPF?

Vì điều này tôi muốn đặt chủ sở hữu của cửa sổ WPF thành cửa sổ win32, nhưng tôi không biết làm thế nào để đạt được điều này.

Mọi trợ giúp tại đây?

Kể từ khi câu trả lời là ẩn đằng sau một số liên kết, đây mã mà đã làm các trick:

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

Trả lời

13

Bài viết này cho thấy cách lấy các chốt cho cả hai cũng như cách làm cho cửa sổ WPF trở thành lớp phủ trong suốt cho cửa sổ win32.

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

Bài viết này sử dụng một WindowInteropHelper để thực hiện chức năng tương tự.

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

MSDN trang trên WindowInteropHelper:

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

Hy vọng rằng sẽ giúp, Ed

+1

Vâng, bài viết thứ 2 đã thực hiện thủ thuật, để viết tắt các dòng sau: Hệ thống :: Windows :: Interop :: WindowInteropHelper^helper = gcnew Hệ thống :: Windows :: Interop :: WindowInteropHelper (myWpfChildWindow); helper-> Owner = (Hệ thống :: IntPtr) myMainWindowHWND; – Sam

+1

Vui vì bạn đã làm việc đó! –

+0

Điều này hoạt động trên .NET 4 nhưng không .NET 3.5. Trên .NET 3.5, việc thay đổi thuộc tính Owner của WindowInteropHelper không có hiệu lực. Có ai biết tại sao, và một workaround? –

1

Làm thế nào về SetParent()? Tôi biết công việc khi thực hiện một cửa sổ WPF một MDI con của một mẫu Windows.

+3

My WPF Window không có chức năng SetParent(). – Sam

Các vấn đề liên quan