【问题标题】:What renders WinForm controls that are hosted in a WPF application?什么呈现 WPF 应用程序中托管的 WinForm 控件?
【发布时间】:2014-06-30 13:00:27
【问题描述】:

MSDN article我发现可以使用HwndHost将WinForm控件托管在WPF应用程序中。

另外,从其他互联网资源中,我发现 WPF 是使用 DirectX 呈现的,而 WinForm 是使用 GDI+ 呈现的。

我的问题是,在 WPF 应用程序中绘制 WinForm 控件时,是什么呈现了 WinForm 控件; DirectX、GDI+ 还是两者兼有?

我对这两种技术和制作婴儿步骤的经验都很少。

谢谢

【问题讨论】:

    标签: wpf winforms hwndhost


    【解决方案1】:

    您要求HwndHost 在 WPF 应用程序中显示 Windows 窗体控件是不正确的。您正在阅读的文章是针对 Win32 互操作的,不是针对 Windows 窗体的。要在 WPF 应用程序中使用 Windows 窗体控件,您应该使用 WindowsFormsHost Class

    至于什么将呈现 Windows 窗体控件,您需要了解一些事情。 WPF 使用与 Windows 窗体完全不同的图形系统。来自 MSDN 上的WPF Graphics Rendering Overview 页面:

    理解 Visual 对象作用的关键之一是理解即时模式和保留模式图形系统之间的区别。基于 GDI 或 GDI+ 的标准 Win32 应用程序使用即时模式图形系统。这意味着应用程序负责重新绘制因调整窗口大小或更改其视觉外观等操作而失效的客户区部分。

    相比之下,WPF 使用保留模式系统。这意味着具有视觉外观的应用程序对象定义了一组序列化的绘图数据。一旦定义了绘图数据,系统随后负责响应所有重绘请求以呈现应用程序对象。即使在运行时,您也可以修改或创建应用程序对象,并且仍然依赖系统来响应绘制请求。保留模式图形系统的强大之处在于,绘图信息始终由应用程序以序列化状态持久化,但渲染责任留给系统。

    因此,一般来说,WPF 渲染系统将渲染 WindowsFormsHost,尽管您可能发现 Windows 窗体确实在 Windows 窗体控件上执行了它自己的一些渲染。

    【讨论】:

    • @Sherian: Element Host [Class] 是一个 WPF 控件,用于在 Windows 窗体应用程序中承载 WPF 元素。 Windows 窗体宿主是一个 WPF 控件,用于在 WPF 应用程序中承载 Windows 窗体元素。 [msdn.microsoft.com/en-us/library/… [msdn.microsoft.com/en-us/library/…
    • 谢谢...你说的很对。我已经相应地更新了我的答案。
    【解决方案2】:

    您需要了解WPF and Win32 Interoperation,它显示了控件是如何绘制的。

    另一方面,Technology Regions Overview 解释了 Wind32、WPF 和 DirectX 之间的关系。

    希望它能让你更清楚这一点..!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多