Как встраивать Window из другого приложения в наше окно WPF в качестве пользовательского элемента управления?
Возможно ли иметь окно из другого стороннего приложения, показанного внутри нашего окна WPF? Предпочтительно в режиме управления контейнером?
Я предполагаю, что может быть некоторый Win32 API, который позволяет нам это делать.
Ответ 1
Я сделал это некоторое время назад для Winforms, но метод не был ярким, так что, пока кто-либо еще не имеет ни малейшего представления, вот что я сделал. Код был примерно таким:
(где SetParent, SetWindowLong и MoveWindow - это функции win32 API, вызванные с помощью p/invoke). Сон необходим как взломать, потому что без него вызов MoveWindow не будет иметь эффекта.
Для WPF вам понадобится дескриптор окна/элемента управления, который будет являться партией вашего стороннего окна, и самый простой способ получить такой дескриптор - использовать HwndHost.
Я не думаю, что в WPF есть более красивый способ добиться этого. Кроме того, обратите внимание, что я тестировал это только в winforms, а не в WPF, но он должен работать и в WPF, если у него есть допустимый win32 HWND родителя.