是什么呈现了WPF应用程序中托管的WinForm控件?

时间:2014-06-30 13:00:28

标签: wpf winforms hwndhost

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

另外,从其他互联网资源中,我发现使用DirectX渲染WPF,使用GDI +渲染WinForm。

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

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

谢谢

2 个答案:

答案 0 :(得分:1)

要求HwndHost在WPF应用程序中显示Windows窗体控件,这是不正确的。您正在阅读的文章适用于Win32 Interoperation,不适用于Windows Forms的。要在WPF应用程序中使用Windows窗体控件,应使用WindowsFormsHost Class

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

  

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

     

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

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

答案 1 :(得分:0)

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

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

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