妙用VB.NET窗體實(shí)現(xiàn)背景花紋
我們每個(gè)都希望程序給我們打來(lái)強(qiáng)大的功能,結(jié)合我的一些經(jīng)驗(yàn)和大家分析探討一下。我們?cè)陂_(kāi)發(fā)軟件過(guò)程中,為提高軟件的商品化程度,感覺(jué)到界面的美觀程度是一個(gè)軟件能否獲得成功的一個(gè)重要因素,我們仔細(xì)研究了一些成功的商品化軟件,從這些軟件上可以看到,程序窗口背景能顯示出非常美麗的、富有立體感的花紋。而采用VVB.NET窗體設(shè)計(jì),若只按照系統(tǒng)提供的功能,只能從有限的幾種顏色中選擇一種顏色或采用程序繪制一些簡(jiǎn)單的線條。而想實(shí)現(xiàn)立體感很強(qiáng)的紋理圖案,一般只能采用窗體的PICTURE屬性調(diào)用位圖文件,使用這種方法實(shí)現(xiàn)有許多缺點(diǎn) ,其一是窗體大小受位圖大小的限制,調(diào)整起來(lái)麻煩,不具有通用性和靈活性;其二是浪費(fèi)資源,因?yàn)榛y圖案基本上是重復(fù)圖案,采用與窗體同樣大小的位圖是一種浪費(fèi)。
#T#下面介紹一種VB.NET窗體背景花紋實(shí)現(xiàn)的方法。在窗體上建立一個(gè)網(wǎng)格控件,設(shè)定網(wǎng)格行不可見(jiàn),去掉固定行和固定列,用程序?qū)崿F(xiàn)網(wǎng)格控件與VB.NET窗體同樣大小,并隨窗體大小的改變而改變。然后設(shè)計(jì)一個(gè)花紋圖案,形成BMP位圖文件(本文程序使用文件Pict1.bmp),或者從其它圖象中截取一段圖案,也可以利用Windows系統(tǒng)提供的圖案(如c:\windows\Tiles.bmp),將其調(diào)入Picture控件。設(shè)定網(wǎng)格的每個(gè)單元與該圖案大小相同,使單元的數(shù)量正好覆蓋整個(gè)窗體背景,再將所有單元均顯示該圖案。通過(guò)子程序Backpict()實(shí)現(xiàn)以上過(guò)程,不論圖案大小、窗體大小,程序都能自動(dòng)調(diào)整網(wǎng)格控件大小和網(wǎng)格單元大小及單元數(shù)量。
該程序在Visual Basic 5.0上調(diào)試成功。
1.新建窗體Form1,屬性如下:
- Caption =“背景花紋的實(shí)現(xiàn)”
- Borderstyle=3(無(wú)***、最小化按鈕)
2.建網(wǎng)格控件Grid1,它的位置和大小將在程序中設(shè)置(與Form1同樣大),屬性為:
- Enabled = False(焦點(diǎn)不會(huì)落在網(wǎng)格控件Grid1上)
- Fillstyle=1(改變所有單元Text特性)
- Fixedcols=0(無(wú)固定行)
- Fixedrows=0(無(wú)固定列)
- Gridlines = False(網(wǎng)格行不可見(jiàn)),
- Visible = True
3.建立圖象控件Picture1,程序運(yùn)行時(shí)將背景花紋基本圖案放入其中,屬性為
- Visible = False(不可見(jiàn))
- Autosize = True(自動(dòng)調(diào)整大小)
4.控件中加入Sheridan 3D Controls,選取其中的三維命令按鈕SSCommand,建立兩個(gè)按鈕
- SSCommand1.Caption=“退出”
- SSCommand2.Caption=“更換背景”(演示不同的背景圖案)
它們的屬性Picture可調(diào)用與背景相同或不同的圖案,如果使用普通的命令按鈕控件Command也可,只是命令按鈕無(wú)背景圖案。
5.建立背景圖案形成子程序:
- Dim pictfile As String '位圖文件名
- Dim FILEPATH As String '文件路徑
- Sub Backpict(pictfile)
- picture1.ScaleMode = 3
- Form1.ScaleMode = 3
- picture1.Picture = LoadPicture(pictfile)
- '網(wǎng)格控件覆蓋整個(gè)窗體背景
- grid1.Top = -1
- grid1.Left = -1
- grid1.Width = Width
- grid1.Height = Height
- grid1.Cols=Int(Form1.ScaleWidth/picture1.ScaleWidth) + 1
- grid1.Rows=Int(Form1.ScaleHeight/picture1.ScaleHeight) + 1
- '所有單元大小等于基本圖案大小
- For i = 0 To grid1.Cols - 1
- For j = 0 To grid1.Rows - 1
- grid1.ColWidth(i) = picture1.ScaleWidth * 15
- grid1.RowHeight(j) = picture1.ScaleHeight * 15
- Next j
- Next I
- '選定所有單元
- grid1.SelStartCol = 0
- grid1.SelStartRow = 0
- grid1grid1.SelEndCol = grid1.Cols - 1
- grid1grid1.SelEndRow = grid1.Rows - 1
- grid1.Picture = Picture1.Picture
- End Sub
6.窗體主程序
- Private Sub Form_Load()
- Private Sub Form_Load()
- '得到運(yùn)行程序路徑名,路徑名后帶反斜杠
- If Right(App.Path, 1) <> "\" Then
- filePath = App.Path & "\"
- Else
- filePath = App.Path
- End If
- '窗體初始顯示由Tiles.bmp基本圖案組成的背景
- pictfile = "c:\windows\Tiles.bmp"
- backpict (pictfile)
- End Sub
7.退出程序命令按鈕
- Private Sub SSCommand1_Click()
- End
- End Sub
8.演示不同的底紋圖案
- Private Sub SSCommand2_Click()
- '兩種背景圖案交替演示
- If pictfile = filePath & "Pict1.bmp" Then
- pictfile = "c:\windows\Tiles.bmp"
- Else
- pictfile = filePath & "Pict1.bmp"
- End If
- Backpict (pictfile)
- End Sub