c# - 在 Windows 桌面应用程序中通过 OpenGL 窗口显示 WPF 控件

标签 c# c++ wpf opengl opengl-es

我们正在开发具有全屏 OpenGL 图形的 Windows 桌面应用程序。现在我们想要在 OpenGL 上显示一堆控件(箭头、按钮等),但事实证明很难做到这一点。

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

不幸的是,现在我们无法通过 WindowsFormsHost 绘制 WPF 控件,互联网上对此也有很多讨论:WindowsFormsHost is always the most top from WPF element Render WPF control on top of WindowsFormsHost

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

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

最佳答案

创建一个 wpf 窗口。 在后台渲染您的 opengl 视口(viewport)。 获取 opengl 视口(viewport)的快照并在 WPF 中显示图像。 将 WPF 图像上的所有 UI 事件传输到 opengl 视口(viewport)。

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

关于c# - 在 Windows 桌面应用程序中通过 OpenGL 窗口显示 WPF 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30398227/

相关文章:

c++11 统一初始化不适用于 "g++ -std=c++0x"

c# - WPF:缓慢的模板实例化

wpf - 处理来自包含 WPF 文本框的用户控件的事件

c# - 成员(member)副本

c# - 匿名类型可以继承自另一种类型吗?

c# - Action 执行按钮可见 false 不起作用

c# - 在 Entity Framework 中使用带参数的存储过程

c# - 从 xhtml 文档中删除未关闭的开始 <p> 标签

c++ - 常量引用如何工作?

C++、Ogre3D、SFML,共享资源?