在Windows桌面应用程序的OpenGL窗口上显示WPF控件

Display WPF controls over OpenGL window in Windows desktop application

本文关键字:显示 WPF 控件 窗口 OpenGL Windows 桌面 应用程序      更新时间:2023-10-16

我们正在开发带有全屏OpenGL图形的Windows桌面应用程序。现在我们想要在OpenGL上显示一堆控件(箭头,按钮等),事实证明这是非常困难的。

大多数教程建议使用WindowsFormsHost进行OpenGL渲染,我们这样做了:http://www.codeproject.com/Articles/23736/Creating-OpenGL-Windows-in-WPF

不幸的是,现在我们不能在WindowsFormsHost上绘制WPF控件,在互联网上也有很多关于这个的讨论:WindowsFormsHost总是最顶级的WPF元素在WindowsFormsHost上渲染WPF控件

有一些hack可以解决这个问题,但是它们看起来都很脏。是否有一种正确的方法来绘制OpenGL直接在WPF没有搞乱Windows窗体?(我只是不知道为什么你不能在WPF中直接使用)。

简而言之:在WPF应用程序中是否有一个已知的解决方案可以在OpenGL上绘制UI ?

创建wpf窗口。在后台渲染你的opengl视窗。获取opengl视图的快照,并在WPF中显示图像。将WPF图像上的所有UI事件转移到opengl视口

编辑:有一种方法可以在WPF窗口中托管win32窗口。你可以参考这个视频https://www.youtube.com/watch?v=JO4uW8Xb230。如果您使用GLFW创建win32窗口,您只需要使用底层句柄或将窗口强制转换为WPF需要托管该窗口的HWND。