Vista与Windows 7中的Aero界面是它们最吸引人的新功能之一,它可以实现大面积的透明界面。但是我们在编程中却不能完全利用这个功能。虽然VB.Net 2005以后的控件已经开始支持XP和Vista的风格了,但是窗体的界面却无法完全实现Aero的毛玻璃效果,只有最外面的一层窗口标题栏是透明的。网上确实有关于如何用.Net语言来实现这一效果的,但那是C#,而不是VB.Net。要VB.Net语言来实现?在网上找不到。难道为了这个功能非得去学C#才行吗?虽然网上有将C#代码转换为VB.Net代码,但它要求完整的代码结构,而网上提供的往往只是一段代码,并不是完整的一个Class,所以也难实现。本文将讲述如何用vb.net做这个界面。
Aero毛玻璃界面之所以无法在vb.net的IDE中直接使用,是因为它是Vista和Win7专有的功能,XP是不可能实现的。这个功能被放在了Vista和Win7的系统目录中的一个API库中,它就是DWMAPI.DLL.所以如果我们要做这种窗口,首先要调用这个API。
'在程序开头导入这个,否则会出错 |
'声明函数和必要的类型,在Class <类名称> 后面输入 |
调用完了以后我们就可以在窗体加载的时候使用了。在Form_Load过程中输入这些:
On Error Resume Next |
好了,我们现在运行这个程序,看看是什么效果
??这是怎么回事?为什么没有出现透明效果呢?难道这个函数是假的?
实际上,Aero的透明技术是将一种颜色映射为Alpha颜色,而这个颜色就是黑色。也就是说,我们必须把窗口的背景设置为黑色才能实现透明效果。但是如果直接把属性中的背景设置为黑色会影响界面设计,所以我们在FormLoad中再加一句:
Me.BackColor = Color.Black |
这样在设计界面时窗体不是黑的,但运行时窗体颜色会自动设置为黑色,这样就可以实现透明界面了。好了,我们启动程序,看看效果:
很好,这次的窗体就是全透明的了。但是我们设计程序不可能只有一个窗体,上面还得加一些Label等很多控件。好,我们在上面添加一个Label控件,文字内容为“Hello Aero”,字体设置为Segoe UI。
然后我们再运行程序,你会发现,为什么没有字呢?原因很简单,字是黑色的,也被当成透明颜色渲染了。实际上要想在这上面写黑色的字体还不容易,必须用graphics ”绘制”一段文本。
好,我们回到刚才的工程中,把Controlbox属性设为False,并把窗体的Text全去掉——自然,窗体就没有标题栏了,这时候窗体大小应该是300,300(vs窗体默认大小),如果不是请改成这个大小。
然后画一个300,200的Picturebox控件,backcolor设置为灰色(再设置一次,否则这个控件起不到作用)并对齐到窗体底部,然后把Locked属性设为TRUE,锁定这个控件。做这个控件的目的是盖住窗体中非透明的黑色区域,否则窗体会很难看。
在picturebox上画一个Button按钮,随便设置一些文字。
然后回到代码界面,在Form_load中要修改一些代码:
margins.cxLeftWidth = 0 margins.cxRightWidth = 0 margins.cyTopHeight = 70 margins.cyButtomheight = 0 |
这样透明的区域被限定为顶部70像素,出来的界面就很像Vista里面的各种向导的窗口了。
然后双击Button1,进入代码界面,在Button1_Click事件中输入这些代码:
Dim g As Graphics g = CreateGraphics() Dim blackfont As New System.Drawing.Drawing2D.GraphicsPath Dim brsh As SolidBrush brsh = New SolidBrush(Color.Black) blackfont.AddString("Hello Aero!", New FontFamily("Tahoma"), FontStyle.Regular, 26, New Point(0, 0), StringFormat.GenericDefault) g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality g.FillPath(brsh, blackfont) |
好了,我们现在运行这个程序,然后单击窗体里面的按钮,看看:
看,黑色的字体可以用graphics来绘制出来。如果你要在picturebox上写字用Label控件也是可以的。
到现在我们的Aero玻璃界面就算完成了。现在你就可以用这个功能来做一个Aero透明界面的程序了。不过你最好在窗口启动的时候检测一下系统版本是不是Vista以上的,因为XP是不能实现的。
至于那些坚守在VB6上的人来说,要实现这个界面是不可能的,就算你调用一大堆API来实现了Aero毛玻璃效果,其他控件的98风格会显得很雷人(虽然vb6有办法实现xp或Vista的界面,但是仅限于一些控件,连进度条都不好使),所以根据时代的变化,还是换到VB.Net平台上吧,其实如果会vb6的话转移到vb.net是不难的,语法跟vb6差不多,有些不一样的东西动用一下搜索引擎就可以了,它的IDE比vb6实在是好用多了。别忘了,现在是2010年,vb6是Windows 98的产物啊……Windows 7开始,Microsoft已经缩减对vb6程序的支持了,Common Dialog控件已经不好使了。据说Windows 8的时候会完全取消对VB6的支持。