从Vista到Windows7,AERO的{tx}都让人惊艳。 当然,我们在V或者7里面创建的WinApp程序,样式也是默认使用当前操作系统的。 but,仅仅是标题栏有{tx},窗体本身没有。 今天,发现QQ2010版本已经使用了窗体{tx},还是挺有意思的。。。 当然,我们用C#也可以实现窗体风格的{tx}【代码非常简单,不到10行】,先看图吧。 注意红线部分。 如图:
嘿嘿,三个太阳了,都祝福我吧。。。 以下,是Windows7自己的窗体{tx},以及控制设置:
但是,这是如何实现的呢?非常简单,打开任务管理器,找到dwm,也就是桌面窗口管理器。
都是依靠dwm实现的。。。如果你把此进程结束,那{tx}就消失了。。。 SO,图形接口肯定就在它背后。。。 我们打开system32目录,找到dwm.exe以及它的库。
当然,我们常规的winform窗体并非透明的,而是这样的:
我们需要借助API来重写窗体,以达到透明化的目的。 --------------------------------- 先导入 [StructLayout(LayoutKind.Sequential)] [DllImport("dwmapi.dll", PreserveSig = false)] [DllImport("dwmapi.dll", PreserveSig = false)] protected override void OnLoad(EventArgs e)
protected override void OnPaintBackground(PaintEventArgs e) 运行之。。。【其实还可以继续扩展,有兴趣的朋友自己研究】 略微有点瑕疵,你发现了吗?
遗憾的是,微软并未公开AERO的核心代码【我非常喜欢其中的模糊和3D{tx}】。。。 让人苦恼不已。。。 当然,{jd1}不是网上流传的所谓的高斯模糊算法,那种低效的算法充其量也就是用在Adobe 一些软件上,比如Photoshop之类的,做模糊{tx}羽化啥的,并不能用于实际工程的开发中,因为效率太低了。 希望微软有朝一日能够开放图形接口的实现,而不是给个API,让人不上不下的。。。 ------------------------------------------- 说句心里话,.net framework都开源了,驱动都提供给Linux好几万行源代码。。。 不在乎图形库这一点点吧。。。当然,涉及到DX,我也死心了。
|