У меня есть приложение WPF, которое, как мне кажется, размещено внутри другого приложения, не являющегося WPF.В реальной жизни это не WPF-приложение представляет собой ActiveX в Internet Explorer, но для иллюстрации проблемы я использую простое приложение Windows Forms.
Я использую функцию Windows API SetParent, в которой уже десятки потоков.Тем не менее, я не могу найти ничего написанного о моей конкретной проблеме: Небольшая область справа и снизу приложения WPF не закрашена в окне не-WPF приложения .
Окно WPFвыполняется сам по себе:
![alt text](https://i.stack.imgur.com/3bb9t.png)
Окно WPF с окном приложения WinForm в качестве родителя:
![alt text](https://i.stack.imgur.com/nIyaQ.png)
У меня нет проблем при замене WPFприложение с приложением WinForms или обычное приложение Win32 (например, Блокнот).
Код WinForm выглядит следующим образом:
private void Form1_Load(object sender, EventArgs e)
{
// Start process
var psi = new ProcessStartInfo("c:\\wpfapp\\wpfapp\\bin\\Debug\\wpfapp.exe");
psi.WindowStyle = ProcessWindowStyle.Normal;
_process = Process.Start(psi);
// Sleep until new process is ready
Thread.Sleep(1000);
// Set new process's parent to this window
SetParent(_process.MainWindowHandle, this.Handle);
// Remove WS_POPUP and add WS_CHILD window style to child window
const int GWL_STYLE = -16;
const long WS_POPUP = 0x80000000;
const long WS_CHILD = 0x40000000;
long style = GetWindowLong(_process.MainWindowHandle, GWL_STYLE);
style = (style & ~(WS_POPUP)) | WS_CHILD;
SetWindowLong(_process.MainWindowHandle, GWL_STYLE, style);
// Move and resize child window to fit into parent's
MoveWindow(_process.MainWindowHandle, 0, 0, this.Width, this.Height, true);
}
Примечание. Мне известно, что использование SetParent не являетсяобязательно рекомендуемая практика, но я хочу и должен выяснить, как это сделать, поэтому, пожалуйста, дайте мне:)