簡體   English   中英

在沒有窗口的Windows桌面上繪制OpenGL

[英]Draw OpenGL on the windows desktop without a window

我已經看過這樣的事情了,我想知道這是否可行,比如我運行我的應用程序,它會在下面的任何內容上顯示渲染。

所以基本上,在沒有窗口的情況下在屏幕上呈現。

可能還是謊言?

注意:想在Windows和c ++中執行此操作。

可以使用您的應用程序在其他應用程序的窗口上繪圖。 一旦你找到了你想要的窗口,你就擁有它的HWND,然后就可以使用它就像你自己的窗口一樣用於繪圖。 但是因為那個窗口不知道你已經做到了這一點,所以當它試圖重繪自己時,它可能會搞亂你所繪制的內容。

有一些非常復雜的解決方法,其中一些涉及使用Windows“鈎子”攔截繪圖消息到該窗口,所以你知道它何時重繪,以便你也可以進行重繪。

另一種選擇是在窗口上使用剪切區域。 這可以讓你給你的窗戶一個不尋常的形狀,並讓它背后的一切看起來仍然正確。

還有一些方法可以接管桌面背景窗口的繪制,您可以實際運行一個在桌面背景上繪制動畫和內容的應用程序(桌面仍然可用)。 至少,這可能通過XP,不確定它是否在Vista / Win7中發生了變化。

不幸的是,所有這些選項都非常復雜,無法深入了解您正在嘗試做什么的更多信息。

您可以使用GetDesktopWindow()來獲取桌面的HWND 但正如之前的回答所說(SoapBox),要小心,你可能會搞砸桌面,因為操作系統希望它擁有它。

幾年前我寫了一個開源項目,以便在桌面背景上實現這一目標。 它被稱為Uberdash。 如果您遵循窗口層次結構,桌面只是一個“背景”容器中的窗口。 然后有一個主容器和一個前容器。 前面的容器是窗戶如何變成全屏或“永遠在頂部”。 您可以使用Aero合成在前端容器中渲染帶有alpha的窗口,但是您需要將事件傳遞到下部窗口。 它不會很漂亮。

此外,某些視頻卡中還有一項稱為覆蓋/底襯的技術。 您曾經能夠直接渲染到疊加層。 您的GPU將直接應用它,不會干擾主存儲器。 因此,即使您進行了屏幕截圖,您的疊加/參考底圖也不會顯示在屏幕截圖中。 不幸的是,MS禁止Vista中的技術...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM