在我的應用程序中,我使用DWM API的方法DwmExtendFrameIntoClientArea來調整窗體,以擴展Aero Glass標題欄的高度,以便繪製部分表單客戶區在Aero框架上。爲了達到這個效果,我還在客戶區域的一部分上繪製了一個黑色的矩形,這個矩形在玻璃框架的「上方」,因此許多在線文章都表示它看起來很透明。這在Windows Vista/Windows 7下運行得非常好,但是當我下載VS 2010並使用.NET Framework 4.0作爲構建我的應用程序的增強框架時,此方法不再有效。問題在於黑色矩形是可見的,即在Aero玻璃上繪製時黑色不再被認爲是透明的。有沒有人有一個想法,可能是什麼問題,以及如何克服?.NET Framework 4.0和在Aero Glass上的繪圖問題
回答
請原諒我,如果這是無益的,但它可能只是改變了他們的調色板?很多時候,這些窗口interop類型的API似乎除了默認的調色板之外還可以使用PBGRA調色板,並且它們的默認顏色調色板可能已經從一個框架版本更改爲另一個。它應該很簡單,以測試這是否正確。我發現了一個類似的渲染硬件遊標的問題,在某些情況下,透明和黑色會被混淆,最終結果是我錯誤地計算了PBGRA,所以BGR中的一個比A更大,這可能會對你的背景應該是透明的顏色。)
使用DWM API方法還有其他一些問題。我並不完全確定,但是從記憶來看,設置新邊距有一些複雜性 - 如果我沒有記錯,它們都需要有相同的符號(+/- )或工件(例如突然出現的黑色背景)有時出現。
這個問題的答案在這裏描述:http://msdn.microsoft.com/en-us/magazine/cc163435.aspx#S6與解決方案的C#。從鏈接頁面(如果鏈接斷開)
摘錄:
使用玻璃作爲你的窗口上的背景是有點棘手。如果你渲染任何自然不透明的東西(比如GDI函數),你會得到你的物品在玻璃上渲染,儘管有時會出現意想不到的結果。如果您想實際將渲染混合到玻璃表面中,則需要利用利用顏色的Alpha通道(例如GDI +,Windows Presentation Foundation或Windows XP Theme API)的功能。
一個特別的問題是,呈現黑色的GDI項目使用位模式0x00000000-如果您使用的是Alpha通道,這也恰好是完全透明的黑色。這意味着如果您使用黑色GDI筆刷或鋼筆繪畫,您將獲得透明顏色,而不是黑色。這個問題最大的問題是,當您嘗試在位於玻璃區域的文本標籤的控件中使用默認文本顏色時。由於默認的文字顏色通常是黑色的,因此DWM會認爲這是透明的,並且文字將被錯誤地寫入玻璃杯中。
而對於WinForms的解決方案:
令人高興的是,有一些解決此問題的方法。使用所有者繪製控件是一個。呈現到具有Alpha通道的位圖是另一個。幸運的是,讓控件上的文本最簡單的方法是讓.NET Framework 2.0爲您使用GDI +。這很容易通過在控件上設置UseCompatibleTextRendering屬性來完成。默認情況下,此屬性設置爲false,以便爲以前版本的.NET Framework編寫的控件呈現相同的效果。但是,如果您將其設置爲true,那麼您的文字將顯得正確。您可以使用Application.SetUseCompatibleTextRenderingDefault方法全局設置屬性。如果您使用的是VisualStudio®2005,則在創建表單之前,模板代碼將包含調用以在主例程中將兼容的文本渲染設置爲false。您可以編輯它以將其設置爲true,如下所示,並且在玻璃窗口上書寫時,您的所有控件都將看起來正確。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(true); // this line fixes an issue
Application.Run(new GlassForm());
}
- 1. log4net和.net Framework 4.0
- 2. 。在Windows 10操作系統上的.net framework 4.0問題
- 3. wpf/net framework 4.0 /圖表和圖表
- 4. .Net Framework 4.0 SDK
- 5. AzCopy - .NET Framework 4.0
- 6. 試圖從Framework 4.0更改爲3.5 .NET的問題
- 7. .Net Framework問題
- 8. 與.net Framework 4.0中
- 9. .net Compact Framework 4.0
- 10. GacUtil + .net framework 4.0
- 11. SQL Server 2012和.NET Framework 4.0
- 12. 如何在WPF Aero Glass標題欄中顯示圖像?
- 13. 結合Aero Glass效果和SWT
- 14. .Net 4.0和.Net 4.5
- 15. .net framework 4.0文檔
- 16. .NET Framework兼容性問題
- 17. 問題的System.Net.Dns.GetHostEntry(的dnsserver)上.NET 4.0
- 18. 針對.NET Framework 4.0
- 19. 在Google Glass上繪製餅圖
- 20. 在F#中擴展Aero Glass(PInvoke)
- 21. Autocad 2010和Framework 4.0
- 22. WPF Aero Glass DPI設置不匹配
- 23. 在一臺服務器上的.NET 4.0和4.5.1出現問題?
- 24. .NET Framework 4.0中的Crystal Report
- 25. SQLite for .NET 4.0的問題
- 26. IIS7.0,ASP.NET 4.0和.NET 4.0程序集加載問題
- 27. 如何啓用Windows Aero主題時在標題欄上繪製位圖圖標
- 28. 如何在無窗口的Windows窗體上獲取Aero Glass?
- 29. 幫助獲取.Net WinForms應用程序以支持Vista Aero Glass
- 30. dotNetInstaller和.NET 4.0
Aero glass works on Windows 7?我認爲這隻適用於Windows Vista上的DWM。 – Svisstack 2010-04-19 11:40:46
@Svisstack:是的;航空玻璃在Windows 7上工作。 – SLaks 2010-04-19 11:44:11
是的,它的工作原理。什麼不起作用,就像我以前使用早期版本的.NET時所做的那樣(<4.0) – WorldIntruder 2010-04-19 11:46:03