本站小編為你精心準(zhǔn)備了軟件界面參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫(xiě)作靈感。歡迎深入閱讀并收藏。
摘要針對(duì)軟件界面因窗口大小的調(diào)整而出現(xiàn)的各類(lèi)問(wèn)題,本文提出了解決這類(lèi)問(wèn)題的技術(shù)、方法及有關(guān)的注意事項(xiàng),并給出了用VB編寫(xiě)的范例程序。
關(guān)鍵詞軟件界面;同比例縮放;實(shí)現(xiàn)技術(shù);VB;對(duì)象變量
1引言
界面是軟件的臉面!軟件是否好用、能否被用戶(hù)所接受,界面起著很重要的作用。然而,在我們所使用的各類(lèi)軟件中,常常出現(xiàn)軟件界面因窗口大小的調(diào)整而發(fā)生變化,以至于出現(xiàn)捉襟見(jiàn)肘、比例失調(diào)甚至“獻(xiàn)丑”的窘境;也正因如此,許多軟件開(kāi)發(fā)者又采用較為保守的設(shè)計(jì)思想,將軟件界面設(shè)計(jì)成Fixed,禁止用戶(hù)調(diào)整大小;還有一些軟件在改變顯示分辨率后出現(xiàn)界面不完整的現(xiàn)象,如Windows的顯示屬性對(duì)話(huà)框,當(dāng)顯示分辨率從1024×768調(diào)整到640×480時(shí),無(wú)法看到界面底部的三個(gè)關(guān)鍵按鈕:“確定”、“取消”和“應(yīng)用”;除非重新啟動(dòng)計(jì)算機(jī)!這一切均給用戶(hù)帶來(lái)諸多不便,究其根源還在于開(kāi)發(fā)者只重視了軟件初始界面的設(shè)計(jì),而對(duì)軟件窗口縮放后所出現(xiàn)的缺陷或估計(jì)不足或缺乏對(duì)策。能否讓軟件界面的大小隨用戶(hù)的需求自由改變,而界面中的各個(gè)對(duì)象隨窗口同縮放,做到軟件界面始終美麗如初呢?為此,筆者進(jìn)行了有益的探索,并在VB中得以實(shí)現(xiàn)。
2實(shí)現(xiàn)技術(shù)
為了保證軟件界面始終如
一、自適應(yīng)各種窗口大小,必須做到窗口中的各個(gè)對(duì)象以及對(duì)象的字號(hào)、圖像等屬性隨窗口同縮放。為此,在軟件啟動(dòng)時(shí)首先要用全局?jǐn)?shù)組將原始窗口的大小以及窗口中各個(gè)對(duì)象的大小、位置及字號(hào)等記錄下來(lái)。然后在窗口的Resize事件中進(jìn)行判斷和調(diào)整:當(dāng)窗口寬度改變時(shí),窗口的放大率K=現(xiàn)窗口寬度÷原始窗口寬度,為保證窗口的比例不變,窗口的高度應(yīng)調(diào)整到原始窗口高度的K倍;反之,當(dāng)窗口高度改變時(shí),窗口的放大率K=現(xiàn)窗口高度÷原始窗口高度,同樣需將窗口的寬度調(diào)整到原始窗口寬度的K倍;如果窗口的寬高同時(shí)改變,則視為窗口的寬度改變即可。最后,為保證窗口中的各個(gè)對(duì)象同比例縮放,對(duì)象的大小(Width、Height屬性)、位置(Left、Right屬性)及字號(hào)(FontSize屬性)也應(yīng)在其原始值的基礎(chǔ)上乘以K。
為了實(shí)現(xiàn)上述功能,用一個(gè)二維的全局?jǐn)?shù)組記錄每一個(gè)對(duì)象的Left、Top、Width、Height和FontSize屬性,然后以對(duì)象變量和二維數(shù)組的行索引為參數(shù)定義兩個(gè)通用過(guò)程GetData和SetData,前者用于獲取對(duì)象的原始屬性值,后者用于設(shè)置對(duì)象的新屬性值。
此外,還要注意以下幾個(gè)問(wèn)題:
(1)軟件啟動(dòng)時(shí),如果窗口的寬度大于屏幕的寬度或窗口的高度大于屏幕的高度時(shí),應(yīng)使其與屏幕同寬或同高,以避免出現(xiàn)類(lèi)似于Windows的顯示屬性對(duì)話(huà)框在分辨率變化時(shí)所出現(xiàn)的尷尬局面。
(2)一般應(yīng)用軟件的窗口在最大化時(shí)會(huì)以屏幕的尺寸為依據(jù)進(jìn)行雙向調(diào)整,這樣就會(huì)破壞原有窗口的比例。如果想讓窗口最大化但又不想破壞窗口的比例,那么在最大化按鈕被單擊時(shí),首先使窗口的左上角與屏幕的左上角重合,然后使窗口的一邊與屏幕同寬或同高,另一邊則按比例放大;究竟要將哪一邊調(diào)整到屏幕的尺寸要看窗口的寬高比值:若窗口偏寬(窗口寬高比>屏幕寬高比),那么應(yīng)以屏幕寬度為準(zhǔn)作為窗口的寬度,否則應(yīng)以屏幕高度為準(zhǔn)作為窗口的高度;這樣可以保證比例不變,而窗口盡可能最大化。
(3)當(dāng)窗口的高度被調(diào)整到非常小,甚至只剩標(biāo)題欄的高度時(shí),應(yīng)以窗口的最小寬度(有最大化等按鈕時(shí),其值約為1700Twip)為準(zhǔn)調(diào)整窗口的高度。
(4)對(duì)于界面中所顯示的圖像,最好用圖像控件Image作為對(duì)象,因?yàn)榇祟?lèi)控件一般都有拉伸屬性Stretch,只要將其設(shè)置成True后顯示在其中的圖像就會(huì)隨圖像框的伸縮而自動(dòng)拉伸,始終呈現(xiàn)給用戶(hù)的是一幅完整的圖像。
3范例程序3.1界面設(shè)計(jì)
啟動(dòng)VB后在窗體中添加四個(gè)控件:一個(gè)圖像框控件Img(先將拉伸屬性Stretch設(shè)置成True,然后用Picture屬性添加一幅圖片)、一個(gè)標(biāo)簽控件Lab(將AutoSize屬性設(shè)置成True,并設(shè)置好標(biāo)題)、一個(gè)文本框控件Txt(將MultiLine屬性設(shè)置成True,并設(shè)置好文本)和一個(gè)按鈕控件Cmd(將標(biāo)題改為“界面增幅10%”,單擊此按鈕時(shí)窗口及各個(gè)對(duì)象放大10%)。3.2編寫(xiě)代碼
DimLastWidth%''''窗體上一次的寬度
Dima%(1To5,1To5)''''對(duì)象的原始數(shù)據(jù)
DimkAsSingle''''窗口的放大率
PrivateSubGetData(OAsObject,nAsInteger)
OnErrorResumeNext
a(n,1)=O.Left
a(n,2)=O.Top
a(n,3)=O.Width
a(n,4)=O.Height
a(n,5)=O.FontSize
Ifn=1Thena(1,4)=O.ScaleHeight:LastWidth=a(1,4)
EndSub
PrivateSubSetData(OAsObject,nAsInteger)
OnErrorResumeNext
O.Left=a(n,1)*k
O.Top=a(n,2)*k
O.Width=a(n,3)*k
O.Height=a(n,4)*k
O.FontSize=a(n,5)*k
EndSub
PrivateSubForm_Load()
GetDataFrm,1
GetDataImg,2
GetDataLab,3
GetDataTxt,4
GetDataCmd,5
IfMe.Width>Screen.WidthOrMe.Height>Screen.HeightThenMe.WindowState=2
EndSub
PrivateSubForm_Resize()
IfMe.WindowState=1ThenExitSub''''最小化
IfMe.WindowState=2Then''''最大化
Me.WindowState=0
Me.Move0,0
IfScreen.Width/Screen.Height>=a(1,3)/a(1,4)Then
Me.Height=Screen.Height
Else
Me.Width=Screen.Width
EndIf
EndIf
IfLastWidth<>Me.WidthThen''''寬度變化
k=Me.Width/a(1,3)
Me.Height=a(1,4)*k+395
Else''''高度變化
k=Me.ScaleHeight/a(1,4)
Me.Width=a(1,3)*k
EndIf
SetDataImg,2
SetDataLab,3
SetDataTxt,4
SetDataCmd,5
IfMe.Height<=a(1,4)/a(1,3)*1680Then
Me.Height=a(1,4)/a(1,3)*1680+395
EndIf''''保證最小窗口也成比例
LastWidth=Me.Width
EndSub
PrivateSubCmd_Click()
Me.Width=Me.Width*1.1
EndSub
3.3運(yùn)行情況
程序運(yùn)行后,不管是拉伸邊框、單擊放大10%按鈕,還是單擊最大化按鈕,窗口中的四個(gè)對(duì)象同比例進(jìn)行縮放,屏幕上始終看到的是一個(gè)如圖1所示的完整的比例不變的界面。
4結(jié)束語(yǔ)
本文雖然給出的范例程序是基于VB編寫(xiě)的,但文中所談的技術(shù)和方法同樣適用于VC++、Delphi、C++Builder等面向?qū)ο蟮木幊陶Z(yǔ)言。
參考文獻(xiàn)
[1]張立科.VisualBasic6.0程序設(shè)計(jì)參考手冊(cè)[M].北京:人民郵電出版社,2003年
[2]美StevenHolzner.VisualBasic技術(shù)內(nèi)幕[M].北京:機(jī)械工業(yè)出版社,1999年