在我的应用程序中,我使用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. 结合Aero Glass效果和SWT
- 4. .Net Framework 4.0 SDK
- 5. .net Compact Framework 4.0
- 6. GacUtil + .net framework 4.0
- 7. .Net Framework问题
- 8. 在F#中扩展Aero Glass(PInvoke)
- 9. WPF Aero Glass DPI设置不匹配
- 10. .net framework 4.0文档
- 11. 针对.NET Framework 4.0
- 12. 问题的System.Net.Dns.GetHostEntry(的dnsserver)上.NET 4.0
- 13. 如何在无窗口的Windows窗体上获取Aero Glass?
- 14. 帮助获取.Net WinForms应用程序以支持Vista Aero Glass
- 15. Autocad 2010和Framework 4.0
- 16. Windows如何更改Aero Glass颜色?
- 17. SQLite for .NET 4.0的问题
- 18. 升级到.Net Framework 4.0
- 19. .NET 4.0图表控件问题
- 20. AjaxPro无法在.Net Framework 4.0和Server 2008/IIS 7上运行
- 21. 窗口焦点问题,.NET 4.0和WindowsFormstHost
- 22. Sharepoint 2010 Foundation with .Net Framework 4.0
- 23. 如果我在Windows 7上安装.NET 4.0 Full,是否需要.NET 4.0 Client Framework?
- 24. Web服务.NET Framework问题
- 25. 在.Net 4.0中使用SqlServerCe的问题
- 26. 在Visual Studio 2010中找不到.net Framework 4.0或.net Framework 4.5
- 27. MSBuild问题与.NET 4.0
- 28. GzipStream(.net 4.0)4GB问题
- 29. .NET Framework 3.5 EntityCollection OrderBy问题
- 30. IIS.net上的ASP.net 4.0 default.aspx问题
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