我必须在客户区涂上什么颜色才能使玻璃出现?
我已经把我的表单框架扩展到客户区使用:
DwmExtendFrameIntoClientArea(self.Handle,margins);
我找不到任何官方文档从微软的DWM将寻找什么颜色和/或阿尔法replace玻璃。 DwmExtendFrameInClientArea文档甚至没有提到自定义颜色是必需的。 只有传闻和神话,甚至需要特殊的颜色。
我能find的最接近MSDN的话题是:
如何在Windows 7中使用Python进行截图?
在Windows Vista / 7(使用DWM)中redirect应用程序的graphics输出
如何在Windows 7 Aero任务预览中创build自己的控件?
如何在订阅DWM组合/ Aero Glass禁用时引发的操作系统级事件?
有没有办法改变非客户区的Windows Aero颜色?
使用DWM自定义窗口框架
为了使扩展帧可见,每个扩展帧边下的区域必须具有α值为0的像素数据。
面向开发人员的Windows Vista – 第3部分 – 桌面窗口pipe理器
偶尔,RGB黑色(0x00000000)的位模式与100%透明ARGB的位模式相同,因此您可以使用“黑色”GDI笔刷进行绘制,并假设您已经指示DWM模糊绘制区域,结果将是所需的玻璃效果。
如果我从字面上理解( alpha值为零的像素数据 ),我构build一个零alpha的颜色,并在扩展区域绘制:
Color fillColor = Color.FromArgb(0,0); //(a,r,g,b) e.Graphics.FillRectangle(new SolidBrush(fillColor),e.ClipRectangle);
但玻璃效果不会出现:
替代文字sof/windows/anlmd4.png
如果我忽略引用的MSDN主题,而是使用完全不透明的黑色(而不是完全透明的黑色):
Color fillColor = Color.FromArgb(255,e.ClipRectangle);
玻璃效果确实出现:
替代文字sof/windows/2ug2ias.png
那么我就会相信不透明的黑色是DWM将用玻璃代替的像素值。
但是,如何在玻璃区域上绘制黑色物品呢?
我已经testing了在玻璃区域画一个黑色的矩形 ,旁边有一个圆圈 。 奇怪的是,矩形不出现,而圆出现; 两个都是一样的颜色:
Brush b = new SolidBrush(Color.FromArgb(255,0)); e.Graphics.FillRectangle(b,11,32,32); e.Graphcis.FillEllipse(b,43,32);
替代文字sof/windows/aayykk.png
那么世界正在发生什么? 在扩展的边框区域涂上适当的颜色以使玻璃出现?
更新2
使用Adisak的build议来隔离航空公司生活中的愚蠢,我在这里画一个黑色的矩形:
替代文字sof/windows/5dw861.png
FillEllipse不支持绘制黑色圆圈吗?
更新3
Pondidum想知道如果调用Graphics.Clear 透明的黑色将使玻璃可见:
e.Graphics.Clear(Color.FromArgb(0,0));
它确实有效,但你仍然不能在玻璃上画出不透明的黑色物品:
替代文字sof/windows/5dw861.png
更新4
看着微软的Vista桥梁库 (围绕Vistafunction的托pipe包装,将不会被添加到.NET),他们只能设法使用WPF窗体,而不是WinForms的扩展玻璃框架。
也可以看看
航空:如何在玻璃上绘制ClearType文字?
航空:如何在玻璃上绘制纯色?
显示窗体时,Windows Vista和7动作效果只应用一次。 为什么?
我的OpenGL游戏将Aero DWM Glassclosures
C#:玻璃forms?
预览窗口后面屏幕状态的Aerofunction是什么?
请帮助 – 从Aero Shake / 3D翻转WM_SYSCOMMAND消息
Color fillColor = Color.FromArgb(0,e.ClipRectangle);
这实际上是相当有趣的。 这意味着你正在绘制完全透明的东西 – 所以这个改变绝对没有!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。