【发布时间】:2016-10-07 13:33:19
【问题描述】:
我正在使用 winform 主机在另一个 WPF 应用程序中显示 WPF exe 窗口。
我在主应用程序中创建了一个面板并将其设置为 winformhost 的子项。
mHostingPanel = new System.Windows.Forms.Panel()
{
BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
};
mWinformHost = new WindowsFormsHost();
mWinformHost.Child = mHostingPanel;
然后我启动另一个窗口进程并将托管面板设置为父面板。
WindowsAPI.SetParent(mProcess.MainWindowHandle, mHostingPanel.Handle);
我的问题是,如果我启动应用程序,谁将渲染我的子 WPF 窗口,其父窗口是 winform 面板。它将是面板的 Direct-X 还是 GDI 上下文?
此外,如果我在子 WPF 应用程序上设置 Allowtransparency=True,则 UI 不会显示在托管面板中。
【问题讨论】:
-
这是邪恶的,不一定是坏事!
-
我不认为获得窗口的所有权会影响 wpf 渲染。不过我会看看这个:blogs.msdn.microsoft.com/oldnewthing/20130412-00/?p=4683
-
@tolanj:如果您阅读了该博客条目,您无法得出结论,这不一定是邪恶的。以一种非常、非常糟糕的方式。那个其他应用程序肯定不准备被重新设置。如果是,它就是一个 ActiveX 控件。
-
真正的问题不是,谁负责渲染。 真正的问题是:输入仍然有效吗?这个问题的答案是:不。它会在某个时候陷入僵局。
标签: c# .net wpf winforms-interop