我有一個程序不是由我寫的。我沒有它的來源,該程序的開發者正在獨立開發。他給了我該程序的HWND
和HINSTANCE
句柄。 我使用win32
api在他的窗口上創建了一個子窗口。 我需要做的第一件事就是讓這個子窗口在某些區域具有透明度,而在其他區域則具有不透明度(例如遊戲的頭部顯示(HUD)),以便用戶可以在兩個窗口中看到事物。在非透明父窗口(win 32)上創建一個透明子窗口
第二件事,我需要的是將所有的輸入指向父窗口。我的孩子窗口不需要輸入。
我知道WS_EX_TRANSPARENT
只會讓孩子畫在畫家算法的末尾。 我不能使用WS_EX_LAYERED
,因爲它是一個子窗口。
在此先感謝:)
p.s. 我看到處處都是,但沒有找到任何解決方案,雖然有類似的問題在互聯網上。 實際上這是一款適用於該遊戲的HUD。我不能直接在父窗口上繪製,因爲多線程的複雜性還有很多其他的原因。
- 編輯--------------------------- 嘿傢伙, 我仍在努力。嘗試不同的方式與你所有的建議。 是否有將directX
和SetWindowRgn()
函數或directx
與BitBlt()
函數結合的方法。我認爲這會做到這一點。 當前我正在測試所有的東西作爲子窗口和分層窗口。
它很醜,但你可以在窗口上創建一個頂層框架並跟蹤窗口下方的移動。然後設置透明區域: http://www.codeguru.com/cpp/wd/dislog/non-rectangulardialogs/article.php/c5037/Creating-Shaped-Windows-Using-Regions-with-Win32.htm – Pete
如果你使窗口透明,只允許你看到父窗口。你想在父窗口打個洞嗎? – Ben
那麼,你至少需要WS_EX_TRANSPARENT。你需要處理的一個問題是,作者將在WM_ERASEBKGND消息上擦除他的窗口,這將消除你從樣式標誌中獲得的背景像素。因此,您需要對其窗口過程進行子類化並取消或替換該消息。使用WM_PAINT繪製的內容是否仍然運行良好是您需要自行找出的一個懸而未決的問題。如果包含任何具有消除鋸齒邊緣的文字或圖形,則賠率很低。作爲評論發佈,因爲成功的可能性很小。 –