我看过这样的事情,我想知道这是否可行,比如我运行我的应用程序 它将在其下方的任何内容上显示渲染。
所以基本上,在没有窗口的情况下在屏幕上渲染。
可能还是谎言?
注意:想在Windows和c ++中执行此操作。
答案 0 :(得分:4)
可以使用您的应用程序在其他应用程序的窗口上绘图。一旦你找到了你想要的窗口,你就拥有它的HWND,然后就可以使用它就像你自己的窗口一样用于绘图。但是,由于那个窗口不知道你已经做到了这一点,它可能会搞砸你在重绘自己时所绘制的内容。
有一些非常复杂的解决方法,其中一些涉及使用Windows“钩子”拦截绘图消息到该窗口,以便您知道它何时重绘,以便您也可以进行重绘。
另一种选择是在窗口上使用剪切区域。这可以让你给你的窗户一个不寻常的形状,并让它背后的一切看起来仍然正确。
还有一些方法可以接管桌面背景窗口的绘制,您可以实际运行一个在桌面背景上绘制动画和内容的应用程序(桌面仍然可用)。至少,这可以通过XP实现,不确定它是否在Vista / Win7中发生了变化。
不幸的是,所有这些选项都太复杂而无法深入了解您没有更多关于您要做什么的信息。
答案 1 :(得分:1)
您可以使用GetDesktopWindow()来获取桌面的HWND
。但正如之前的回答所说(SoapBox),要小心,你可能会搞乱桌面,因为操作系统希望它拥有它。
答案 2 :(得分:0)
几年前我写了一个开源项目,以便在桌面背景上实现这一目标。它被称为Uberdash。如果您遵循窗口层次结构,桌面只是一个“背景”容器中的窗口。然后有一个主容器和一个前容器。前面的容器是窗户如何变成全屏或“永远在顶部”。您可以使用Aero合成在前端容器中渲染带有alpha的窗口,但是您需要将事件传递到下部窗口。它不会很漂亮。
此外,某些视频卡中还有一种技术称为覆盖/底衬。您曾经能够直接渲染到叠加层。您的GPU将直接应用它,不会干扰主存储器。因此,即使您进行了屏幕截图,您的叠加/参考底图也不会显示在屏幕截图中。不幸的是,MS禁止在Vista中使用该技术......