我有一个用 C++ 编写并使用 DirectX 11 的 native 控件,我想将其嵌入到 WPF 应用程序中。目前该控件托管在 Windows 应用商店应用程序中,并且运行良好。我提到这一点是为了防止商店应用程序兼容性很重要。
基于 Hosting Win32 Content in WPF ,我的理解是,因为 WPF 执行自己的组合,并且具有单个窗口句柄,核心复杂性是为 native 控件提供另一个窗口句柄。因此,解决方案是向 WPF 页面添加 WindowsFormHost 控件或派生自 HwndHost 的控件,并以某种方式将 WPF 控件与 native 控件相关联。
我浏览了 Hosting a Win32 Control in WPF walkthrough on MSDN .但是,我的控件没有像 ListBox(示例中使用的控件)那样在操作系统中注册。所以,我不能将它作为参数传递给 CreateWindowEx。如何关联自己的控件?我是否创建 WindowsFormsHost 并调用 SetParent(myControlsHandle, windowsFormsHost.Handle)?还是创建 WPF Border 并将其 Child 属性设置为 HwndHost 实例?
还有其他与 WPF 中的 native 控件相关的问题(here 和 here,虽然后者是关于应用程序,而不是控件),但没有一个解决这个问题。
我研究了一种不同的方法,其中 WPF 控件与 native 控件共享 D3DImage,但这需要 DirectX9EX,而我的控件是用 Dx11 编写的。
最佳答案
在 msdn.hope 中找到一篇文章,希望对您有所帮助。 http://msdn.microsoft.com/en-us/library/ms742522(v=vs.110).aspx
关于c++ - 在 WPF 中托管 native 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23504180/