【发布时间】:2014-06-23 15:02:06
【问题描述】:
我有一个用 C++ 编写并使用 DirectX 11 的本机控件,我想将其嵌入 WPF 应用程序中。目前,该控件托管在 Windows 应用商店应用程序中,并且工作正常。如果商店应用程序的兼容性很重要,我会提到这一点。
基于Hosting Win32 Content in WPF,我的理解是因为WPF执行自己的组合,并且有一个单一的窗口句柄,核心复杂性是为原生控件提供另一个窗口句柄。因此,解决方案是向 WPF 页面添加 WindowsFormHost 控件或派生自 HwndHost 的控件,并以某种方式将 WPF 控件与本机控件相关联。
我通过了Hosting a Win32 Control in WPF walkthrough on MSDN。但是,我的控件没有像 ListBox(示例中使用的控件)那样向操作系统注册。所以,我不能将它作为参数传递给 CreateWindowEx。如何关联我自己的控件?我是否创建一个 WindowsFormsHost 并调用 SetParent(myControlsHandle, windowsFormsHost.Handle)?或者我是否创建一个 WPF 边框并将其 Child 属性设置为 HwndHost 实例?
还有其他与 WPF 中的本机控件相关的问题(here 和 here,尽管后者是关于应用程序,而不是控件),但没有一个解决这个问题。
我研究了另一种方法,其中 WPF 控件与本机控件共享 D3DImage,但这需要 DirectX9EX,并且我的控件是用 Dx11 编写的。
【问题讨论】: