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