設置:我有一個頂層窗口,其中定義了一個區域(使用SetWindowRgn()
創建),並且我有一個移動的子元素(與SetWindowPos()
),使其一些像素然後重疊父窗口區域的剪切部分。窗口區域,移動的孩子,DWM和它可以創建的白色塊狀垃圾
結果:這些像素變得充滿不透明的全白像素,而不是保持完全透明(因爲它在其父區域之外)。這並不是說當子窗口不應該繪製時,因爲無論子窗口是什麼樣子,有問題的像素都是白色的。
下面,橙色的小窗口已經沿着父窗口的邊緣移動了一下。這隻發生在具有透明窗口區域的邊緣上(所以白色像素總是被約束在父窗口的最大矩形內)。
兩不誤自己,如果父窗口被隱藏,然後顯示(只是無效,並迫使重繪不清除白色像素)。
在Vista和7上都觀察到此情況。如果禁用桌面窗口管理器(DWM),則此行爲將消失。在一種情況下,它在更新顯卡驅動程序後也會消失。也許它與這個問題有關?:Vista live thumbnail issue with SetWindowRgn。我原本打算把這個文件作爲一個罕見的錯誤提交,但它已經足以應付更多的審查。
有沒有其他人跑過來呢?深入瞭解DWM和窗口區域如何相互作用?
此外,我知道我可以禁用每個應用程序的DWM,但在應用程序運行時會禁用它,除了導致屏幕在啓動和關閉時發生曇花一現外,這真的不是更好問題。
你試過不同的圖形卡(單獨的機器)嗎? 另外,你是否確保你正確地使用GDI在你的塗料上繪製alpha通道? –
這實際上沒有任何alpha通道,因爲我已經簡化了一些東西來縮小原因;測試中唯一的透明膠片來自窗口區域。我已經在很多機器上嘗試過了,其中大部分都沒有出現這個問題 - 只有少數幾臺機器確實存在這個問題,但對於那些機器來說每次都是可重複的。 –
所有發生故障的機器都有視頻卡製造商的共同點嗎?根據您的信息,我強烈懷疑視頻驅動程序錯誤。 –