C++ 在没有窗口的windows桌面上绘制OpenGL

C++ 在没有窗口的windows桌面上绘制OpenGL,c++,windows,opengl,desktop,cube,C++,Windows,Opengl,Desktop,Cube,我见过这样的事情,我想知道这是否可能,比如说我运行我的应用程序 它将在它下面的任何地方显示渲染 基本上,在没有窗口的屏幕上进行渲染 可能还是谎言 注意:希望在Windows和C++中实现这一点。< P>可以使用你的应用程序绘制其他应用程序的窗口。一旦你找到了你想要的窗口,你有了它的HWND,你就可以像你自己的窗口一样使用它来画画。但由于该窗口不知道您已经这样做了,当它试图重新绘制自身时,它可能会弄乱您在其上绘制的任何内容 有一些非常复杂的方法可以解决这个问题,其中一些涉及到使用窗口“钩子”来截取

我见过这样的事情,我想知道这是否可能,比如说我运行我的应用程序 它将在它下面的任何地方显示渲染

基本上,在没有窗口的屏幕上进行渲染

可能还是谎言


注意:希望在Windows和C++中实现这一点。

< P>可以使用你的应用程序绘制其他应用程序的窗口。一旦你找到了你想要的窗口,你有了它的HWND,你就可以像你自己的窗口一样使用它来画画。但由于该窗口不知道您已经这样做了,当它试图重新绘制自身时,它可能会弄乱您在其上绘制的任何内容

有一些非常复杂的方法可以解决这个问题,其中一些涉及到使用窗口“钩子”来截取指向该窗口的绘图消息,这样您就可以知道它何时重画,以便您也可以重画

另一个选项是在窗口上使用剪裁区域。这可以让你给你的窗户一个不寻常的形状,让它后面的一切看起来仍然正确

还有一些方法可以接管桌面背景窗口的绘制,您可以实际运行一个在桌面背景上绘制动画和内容的应用程序(而桌面仍然可用)。至少,这在XP中是可能的,不确定它是否在Vista/Win7中发生了变化


不幸的是,所有这些选项都非常复杂,如果没有更多关于您要做什么的信息,就无法深入了解。

您可以使用,以获取桌面的
HWND
。但是正如前面的回答(SoapBox)所说的,小心,你可能会弄乱桌面,因为操作系统希望它拥有它。

几年前我写了一个开源项目来在桌面背景上实现这一点。它叫Uberdash。如果遵循窗口层次结构,则桌面只是某种“背景”容器中的一个窗口。然后是一个主容器和一个前容器。前容器是窗口如何变成全屏或“始终在顶部”的。您可以使用Aero composition在前容器中使用alpha渲染窗口,但需要将事件传递到较低的窗口。不会很漂亮的


此外,在一些视频卡中有一种称为叠加/底图的技术。您过去可以直接渲染到覆盖。您的GPU将直接应用它,不会干扰主内存。因此,即使您拍摄了屏幕截图,您的覆盖/参考底图也不会显示在屏幕帽中。不幸的是微软在Vista中禁止了这项技术……

是的,使用它(正确地)很难,我的猜测是我可以光栅化每一帧,然后一直将其用作自定义形状的窗口,但这会变得相当缓慢。我以前使用过GDI在桌面上绘制png等,但在这方面获取动画有点棘手,但我将尝试使用GDI实现我的光栅化想法,将所有内容渲染为png,并与GDI一起使用。当然感谢SoapBox和gbrandt的帮助。我不明白您想对渲染输出做什么:您想在哪里显示它?相关的: