2014-09-01 101 views
2

我試圖在身臨其境的全屏模式下繪製另一個過程的頂部。 我知道這是可能的使用GDI,我有2個問題:身臨其境的全屏模式的透明窗口

  1. 是否有可能使用頂級透明窗口? (在沉浸式過程之上)
  2. 是否有更高級別的API可以用來代替GDI?

謝謝:)

回答

7

在Windows中,你必須創建全屏窗口兩種可能性:

  1. 獨家特別提款權該顯示器的全屏應用。
  2. 擴展到完整桌面分辨率的無邊框窗口。

第一個選項允許您更改分辨率,位深度和刷新率等顯示屬性,而第二個選項在這裏與常規(窗口)桌面應用程序綁定使用相同的選項。

疊加一個全屏窗口與頂層窗口是可能的,如果全屏應用與選項2.然而實現。在這種情況下,任何代碼,其能夠建立一個透明的頂層窗口會做(無論是純WinAPI/GDI還是更復雜的東西,比如Qt)。

使用選項1,如描述所示,全屏應用程序具有顯示器的獨佔繪圖權限。試圖在其前面放置另一個窗口將最小化全屏應用程序或強制它進入窗口模式。

在這種情況下,你仍然可以獲得覆蓋圖,但它們相當具有侵入性。例如,對於基於D3D的全屏應用程序,您可以使用D3D的Present例程,並讓D3D在顯示後臺緩衝區之前繪製覆蓋圖。這裏重要的一點是,用於繪製覆蓋圖的代碼是在全屏應用程序的進程內執行的,因爲這是允許在該點上繪製到屏幕上的唯一進程。

請注意,某些應用程序(特別是受反作弊軟件保護的視頻遊戲)如果以此方式向代碼中注入代碼,則不會太喜歡它。

請注意,Win API還爲所謂hardware overlays提供了一個接口,它允許在獨佔全屏應用程序之上進行繪圖。不幸的是,這種機制在消費者硬件上並未得到廣泛支持,並且可能無法工作,具體取決於您試圖運行哪個圖形卡。

+0

謝謝:) 因此,如果可以使用GDI(GetWindowDC,Rectangle ext)繪製窗口,我可以確定窗口是通過選項1實現的嗎? – kliklk 2014-09-01 09:00:43