我们可以将一个进程的Direct3D窗口渲染到另一进程的HWND中吗?

时间:2020-03-06 14:31:45  来源:igfitidea点击:

我要做的是让Windows应用程序启动另一个Direct3D应用程序,并将Direct3D应用程序渲染到父进程提供的控件中。

这有可能吗?如果是的话,该怎么办?

解决方案

这个有可能。我记得在编写屏幕保护程序时在VB6中进行了此操作。屏幕保护程序控制面板将命令行和预览窗口的HWND发送到屏幕保护程序。使用该HWND,我们便可以获取HDC,然后从那里获取其他所需的一切。

可以轻松完成,我们要做的就是在创建D3DDevice时将HWND窗口ID作为参数传递。
它甚至可以在互操作期间工作,我们可以将hWnd从.NET传递到C ++,并使用本机DirectX渲染Cwindow。

这是一个示例,在现有Win32窗口中托管WPF窗口的内容。我在编写基于WPF的屏幕保护程序时必须执行此操作,而必须将其渲染到"屏幕保护程序"的小预览窗口中。

http://stuff.seans.com/2008/09/01/writing-a-screen-saver-in-wpf/