我試圖建立一個透明的窗口,在Windows 10「玻璃」效果這工作直到最近:Windows 10中帶標題欄的模糊窗口?後停止工作Windows更新
我一直在做的是:
- 塗刷到包括alpha通道的目標DC。在普通GDI中執行此操作的一種方法是使用alpha通道構建圖像,然後使用SRCCOPY將其BitBlt創建到DC。您也可以使用AlphaBlend函數。
- 然後我使用SetWindowCompositionAttribute(或DwmExtendFrameIntoClientArea)在Windows 10(或更早版本)上啓用模糊。
這一直工作到今天,更新後突然停止工作 - 窗口現在是不透明的。我使用了系統恢復,並且有一天回去了,它實際上再次運行了!任何想法如何解決這個問題?
「由於GDI不支持alpha通道,因此也會將每個像素的alpha值設置爲零。」這不一定是真的;這是一個實現細節。使用每像素alpha創建窗口的常用方法是使用分層窗口並調用UpdateLayeredWindow。 –
@AdrianMcCarthy:當然這是一個無證的實現細節。但是調用SetWindowCompositionAttribute來創建玻璃效果也是如此,所以無論如何我都在無證的土地上。切換到分層窗口將需要重新編寫基於WM_PAINT的代碼,並且我不確定它可以工作(我想要一個不透明的標準標題欄,但是是半透明的內容區域)。此外,自Vista以來的「玻璃」透明度不是基於分層窗口,而是具有Alpha通道的常規窗口(混合由DWM完成)。 – jdm
你知道有什麼方法使用'SetWindowCompositionAttribute'來設置模糊區域(儘可能使用'DwmEnableBlurBehindWindow'),以防止模糊區域在客戶區外? – melak47