Visual Basic中軟件封面技術(shù)探秘
發(fā)布時間:2008-08-23 閱讀數(shù): 次 來源:網(wǎng)樂原科技
封面技術(shù)在軟件開發(fā)中越來越成為一種標(biāo)準(zhǔn),無論你在dos或windows的環(huán)境下 進(jìn)行軟件開發(fā),一個漂亮而醒目的封面總會使你的軟件更加充滿魅力。
對于windows環(huán)境下的應(yīng)用軟件,封面技術(shù)更是必不可少。微軟公司的office套件,如word,其簡潔美觀,具有真實(shí)三維效果的封面給所有office的用戶留下了深刻的印象。其封面的設(shè)計(jì)完全可以作為windows應(yīng)用程序的標(biāo)準(zhǔn)。從word的封面設(shè)計(jì)我們可以看出windows環(huán)境下的應(yīng)用軟件的封面設(shè)計(jì)應(yīng)遵循以下原則:
在主界面載入的同時載入,封面應(yīng)該清楚的顯示軟件名稱及版本信息,在主界面載入完畢后自動卸出內(nèi)存,讓出所占用的windows系統(tǒng)資源。
使用微軟公司的visual basic進(jìn)行軟件開發(fā)是windows環(huán)境下應(yīng)用程序開發(fā)的捷徑,同樣,使用visual basic制作應(yīng)用程序封面也是相當(dāng)方便的。在開發(fā)過程中,主要應(yīng)該解決的問題有:
1. 封面的制作。
這不是一個純技術(shù)性的問題。開發(fā)者必須有一定的美術(shù)知識和功底,制作出的封面也可以具有個人的不同的風(fēng)格。在Visual Basic中,封面也是一個窗體,開發(fā)者可以在窗體上使用Visual Basic的繪圖工具line和shape繪制出圖形,甚至可以繪制出類似word的三維效果,也可以在窗體內(nèi)載入一個圖片框(picture box)或圖象控制(image control),利用圖片框或圖象控制載入自己所喜歡的圖片來制作封面,在圖形之上,可以使用文本框(text box)或標(biāo)簽框(label)來顯示版本信息。為了使這樣的一個窗體更加象一個封面,應(yīng)該去除窗體的控制框,標(biāo)題欄和最大最小化按鈕,同時窗體的大小也不允許用戶改變。因而在封面窗體的屬性中,屬性control box應(yīng)設(shè)為false,caption應(yīng)設(shè)為空,maxbutton和minbutton應(yīng)設(shè)為false,borderstyler屬性設(shè)為1,即固定的單線邊界,這樣就實(shí)現(xiàn)了一個具有專業(yè)水準(zhǔn)的封面。
2. 浮動窗體的實(shí)現(xiàn)。
由于主窗體先載入,然后激發(fā)封面的事件(event),使封面窗體成為當(dāng)前活動窗體,所以必須保證窗體總是浮在主窗體的上面,在Visual Basic中,這個問題主要依靠調(diào)用windows的api函數(shù)setwindowpos來實(shí)現(xiàn)。setwindowpos函數(shù)的聲明如下:
declare sub setwindowpos lib "user" (byval hwnd as integer, byval hwndinsertafter as integer, byval x as integer, byval y as integer, byval cx as integer, byval cy as integer, byval wflags as integer)
其中: hwnd為作為封面窗體的句柄;
hwndinsertafter 指示為封面窗體前載入的窗體;
x為封面窗體左上角的x坐標(biāo);
y為封面窗體左上角的y坐標(biāo);
cx為窗體新寬度;
cy為窗體新高度;
wflags影響窗體大小和位置的16位值。
其中,hwndinsertafter設(shè)為hwnd_topmost,wflags設(shè)為swp_nomove (不移動窗體,即忽略cx和cy)或swp_nosize(不改變窗體大小,即忽略x和y),就可以實(shí)現(xiàn)將hwnd標(biāo)識的窗體置于所有非最頂窗體之上。
3. 還要保證主窗體載入完畢后,封面窗體自動卸出。
這主要靠在主窗體中使用定時器控件,在激活主窗體的activate事件中激活定時器,設(shè)置定時器屬性,在定時器控件的事件timer中,關(guān)閉定時器,卸出封面。
下面給出的程序?qū)嵗且粋€完整的封面設(shè)計(jì),供Visual Basic程序開發(fā)者參考。
假設(shè)封面窗體名為frmcover,主窗體名為frmmain,其中封面窗體可以用繪圖指令繪出,下 面的程序給出了繪制三維窗體的方法,在封面窗體載入過程中,窗體上可根據(jù)用戶需要繪制三維面板或圖片框等。
sub form_load ()
dim fwidth as integer
dim i as integer, t as integer, l as integer
dim w as integer, h as integer
frmcover.backcolor = &hc0c0c0
frmcover.left = (screen.width - width) / 2
frmcover.top = (screen.height - height) / 2
frmcover.scalemode = 3: fwidth = 4
frmcover.autoredraw = -1
for i = 1 to fwidth
t = i
l = i
h = scaleheight
w = scalewidth
line (l, t)-(l, h - i), rgb(255, 255, 255)
line (l, t)-(w - i, t), rgb(255, 255, 255)
line (w - l, t)-(w - l, h - t), rgb(64, 64, 64)
line (l, h - l)-(w - l, h - l), rgb(64, 64, 64)
next i
end sub
在主窗體的激活過程中激活定時器,并設(shè)置定時器的interval屬性,程序如下:
sub form_activate ()
timer1.interval = 3000 ’封面存在時間為3秒
timer1.enabled = true ’打開定時器
end sub
載入封面的代碼放在主窗體的load事件中,可以改變鼠標(biāo)形狀以示用戶等待。首先在通用過程中聲明常量:
const hwnd_topmost = -1
const swp_nomove = &h10
const swp_nosize = &h40
const flags = swp_nomove or swp_nosize
程序中使用setwindowpos 函數(shù)實(shí)現(xiàn)浮動效果:
sub form_load ()
screen.mousepointer = 11 ’鼠標(biāo)呈沙漏狀
frmcover.show ’顯示封面
frmcover.refresh
setwindowpos frmcover.hwnd, hwnd_topmost, 0, 0, 0, 0, flags
end sub
定時器時間到后關(guān)閉定時器,同時卸載封面窗體,使用戶可以繼續(xù)操作主窗體。程序如下:
sub timer1_timer ()
frmmain.timer1.enabled = false ‘關(guān)閉定時器
unload frmcover ‘卸載封面
screen.mousepointer = 0 ‘鼠標(biāo)恢復(fù)原樣
end sub
這樣就實(shí)現(xiàn)了一個標(biāo)準(zhǔn)的軟件封面,整個程序設(shè)計(jì)思路簡單清晰,較好的解決了上述三個問題。它也充分體現(xiàn)了使用Visual Basic開發(fā)windows應(yīng)用程序的方便和高效性,希望對Visual Basic程序員和愛好者有所啟發(fā)。