国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
VB.Net:如何實現(xiàn)Aero玻璃界面? - gqyz01sw的日志 - 網(wǎng)易博客

VB.Net:如何實現(xiàn)Aero玻璃界面?

計算機(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)入這個,否則會出錯
Imports System.Runtime.InteropServices

 '聲明函數(shù)和必要的類型,在Class <類名稱> 后面輸入
    <StructLayout(LayoutKind.Sequential)> _
    Public Structure MARGINS
        Public cxLeftWidth As Integer
        Public cxRightWidth As Integer
        Public cyTopHeight As Integer
        Public cyButtomheight As Integer
    End Structure

    <DllImport("dwmapi.dll")> _
    Public Shared Function DwmExtendFrameIntoClientArea(ByVal hWnd As IntPtr, ByRef pMarinset As MARGINS) As Integer
    End Function

調(diào)用完了以后我們就可以在窗體加載的時候使用了。在Form_Load過程中輸入這些:

        On Error Resume Next
        Dim margins As MARGINS = New MARGINS
        margins.cxLeftWidth = -1
        margins.cxRightWidth = -1
        margins.cyTopHeight = -1
        margins.cyButtomheight = -1
        '這四個值分別是透明區(qū)域的左、右、上、下的高度,如果設(shè)置為-1則說明全透明。
        '如果設(shè)置指定區(qū)域則輸入0以上的數(shù)字

        Dim hwnd As IntPtr = Me.Handle
        Dim result As Integer = DwmExtendFrameIntoClientArea(hwnd, margins)

好了,我們現(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的支持。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Visual Basic是什么
這6道VB編程基礎(chǔ)知識題,讓你收獲滿滿
vb.net使用TreeView 控件顯示文件夾列表
全國計算機(jī)二級VB復(fù)習(xí)要點
怎樣用熱敏打印機(jī)把vb.net窗體內(nèi)文本框內(nèi)容打印出來
VB愛好者樂園(VBGood) - 經(jīng)驗之談 - VB編程的必備技巧
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服