計算機技術(shù) 2010-02-26 10:51:39 閱讀732 評論4 字號:大中小 訂閱
Vista與Windows 7中的Aero界面是它們最吸引人的新功能之一,它可以實(shí)現大面積的透明界面。但是我們在編程中卻不能完全利用這個(gè)功能。雖然VB.Net 2005以后的控件已經(jīng)開(kāi)始支持XP和Vista的風(fēng)格了,但是窗體的界面卻無(wú)法完全實(shí)現Aero的毛玻璃效果,只有最外面的一層窗口標題欄是透明的。網(wǎng)上確實(shí)有關(guān)于如何用.Net語(yǔ)言來(lái)實(shí)現這一效果的,但那是C#,而不是VB.Net。要VB.Net語(yǔ)言來(lái)實(shí)現?在網(wǎng)上找不到。難道為了這個(gè)功能非得去學(xué)C#才行嗎?雖然網(wǎng)上有將C#代碼轉換為VB.Net代碼,但它要求完整的代碼結構,而網(wǎng)上提供的往往只是一段代碼,并不是完整的一個(gè)Class,所以也難實(shí)現。本文將講述如何用vb.net做這個(gè)界面。
Aero毛玻璃界面之所以無(wú)法在vb.net的IDE中直接使用,是因為它是Vista和Win7專(zhuān)有的功能,XP是不可能實(shí)現的。這個(gè)功能被放在了Vista和Win7的系統目錄中的一個(gè)API庫中,它就是DWMAPI.DLL.所以如果我們要做這種窗口,首先要調用這個(gè)API。
| '在程序開(kāi)頭導入這個(gè),否則會(huì )出錯 |
| '聲明函數和必要的類(lèi)型,在Class <類(lèi)名稱(chēng)> 后面輸入 <DllImp |
調用完了以后我們就可以在窗體加載的時(shí)候使用了。在Form_Load過(guò)程中輸入這些:
| On Error Resume Next |
好了,我們現在運行這個(gè)程序,看看是什么效果
??這是怎么回事?為什么沒(méi)有出現透明效果呢?難道這個(gè)函數是假的?
實(shí)際上,Aero的透明技術(shù)是將一種顏色映射為Alpha顏色,而這個(gè)顏色就是黑色。也就是說(shuō),我們必須把窗口的背景設置為黑色才能實(shí)現透明效果。但是如果直接把屬性中的背景設置為黑色會(huì )影響界面設計,所以我們在FormLoad中再加一句:
| Me.BackColor = Color.Black |
這樣在設計界面時(shí)窗體不是黑的,但運行時(shí)窗體顏色會(huì )自動(dòng)設置為黑色,這樣就可以實(shí)現透明界面了。好了,我們啟動(dòng)程序,看看效果:
很好,這次的窗體就是全透明的了。但是我們設計程序不可能只有一個(gè)窗體,上面還得加一些Label等很多控件。好,我們在上面添加一個(gè)Label控件,文字內容為“Hello Aero”,字體設置為Segoe UI。
然后我們再運行程序,你會(huì )發(fā)現,為什么沒(méi)有字呢?原因很簡(jiǎn)單,字是黑色的,也被當成透明顏色渲染了。實(shí)際上要想在這上面寫(xiě)黑色的字體還不容易,必須用graphics ”繪制”一段文本。
好,我們回到剛才的工程中,把Controlbox屬性設為False,并把窗體的Text全去掉——自然,窗體就沒(méi)有標題欄了,這時(shí)候窗體大小應該是300,300(vs窗體默認大?。?,如果不是請改成這個(gè)大小。
然后畫(huà)一個(gè)300,200的Picturebox控件,backcolor設置為灰色(再設置一次,否則這個(gè)控件起不到作用)并對齊到窗體底部,然后把Locked屬性設為T(mén)RUE,鎖定這個(gè)控件。做這個(gè)控件的目的是蓋住窗體中非透明的黑色區域,否則窗體會(huì )很難看。
在picturebox上畫(huà)一個(gè)Button按鈕,隨便設置一些文字。
然后回到代碼界面,在Form_load中要修改一些代碼:
| margins.cxLeftWidth = 0 margins.cxRightWidth = 0 margins.cyTopHeight = 70 margins.cyButtomheight = 0 |
這樣透明的區域被限定為頂部70像素,出來(lái)的界面就很像Vista里面的各種向導的窗口了。
然后雙擊Button1,進(jìn)入代碼界面,在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) |
好了,我們現在運行這個(gè)程序,然后單擊窗體里面的按鈕,看看:
看,黑色的字體可以用graphics來(lái)繪制出來(lái)。如果你要在picturebox上寫(xiě)字用Label控件也是可以的。
到現在我們的Aero玻璃界面就算完成了?,F在你就可以用這個(gè)功能來(lái)做一個(gè)Aero透明界面的程序了。不過(guò)你最好在窗口啟動(dòng)的時(shí)候檢測一下系統版本是不是Vista以上的,因為XP是不能實(shí)現的。
至于那些堅守在VB6上的人來(lái)說(shuō),要實(shí)現這個(gè)界面是不可能的,就算你調用一大堆API來(lái)實(shí)現了Aero毛玻璃效果,其他控件的98風(fēng)格會(huì )顯得很雷人(雖然vb6有辦法實(shí)現xp或Vista的界面,但是僅限于一些控件,連進(jìn)度條都不好使),所以根據時(shí)代的變化,還是換到VB.Net平臺上吧,其實(shí)如果會(huì )vb6的話(huà)轉移到vb.net是不難的,語(yǔ)法跟vb6差不多,有些不一樣的東西動(dòng)用一下搜索引擎就可以了,它的IDE比vb6實(shí)在是好用多了。別忘了,現在是2010年,vb6是Windows 98的產(chǎn)物啊……Windows 7開(kāi)始,Microsoft已經(jīng)縮減對vb6程序的支持了,Common Dialog控件已經(jīng)不好使了。據說(shuō)Windows 8的時(shí)候會(huì )完全取消對VB6的支持。
聯(lián)系客服