从MSDN 文章中,我发现 WinForm 控件可以使用HwndHost
.
另外,从其他互联网资源中,我发现 WPF 是使用 DirectX 呈现的,而 WinForm 是使用 GDI+ 呈现的。
我的问题是,当在 WPF 应用程序中绘制 WinForm 控件时,是什么呈现 WinForm 控件?DirectX、GDI+,还是两者兼而有之?
我对这两种技术和制作婴儿步骤的经验都很少。
谢谢
您要求HwndHost
在 WPF 应用程序中显示 Windows 窗体控件是不正确的。您正在阅读的文章是针对 Win32 互操作的,而不是针对 Windows 窗体的。要在 WPF 应用程序中使用 Windows 窗体控件,您应该使用WindowsFormsHost
Class。
至于什么将呈现 Windows 窗体控件,您需要了解一些内容。WPF 使用与 Windows 窗体完全不同的图形系统。从 MSDN 上的WPF 图形渲染概述页面:
理解 Visual 对象作用的关键之一是理解即时模式和保留模式图形系统之间的区别。基于 GDI 或 GDI+ 的标准 Win32 应用程序使用即时模式图形系统。这意味着应用程序负责重新绘制由于诸如调整窗口大小或对象更改其视觉外观等操作而无效的客户区部分。
相比之下,WPF 使用保留模式系统。这意味着具有视觉外观的应用程序对象定义了一组序列化的绘图数据。一旦定义了绘图数据,系统随后负责响应所有重绘请求以呈现应用程序对象。即使在运行时,您也可以修改或创建应用程序对象,并且仍然依赖系统来响应绘制请求。保留模式图形系统的强大之处在于绘图信息始终由应用程序以序列化状态持久化,但渲染责任留给系统。
WindowsFormsHost
因此,一般来说,WPF 渲染系统会渲染.
您需要了解WPF 和 Win32 互操作,它显示了控件是如何绘制的。
另一方面,Technology Regions Overview解释了 Wind32、WPF 和 DirectX 之间的关系。
希望它会让你更清楚这一点..!!!