在設(shè)計一般應用軟件時,總希望設(shè)計的軟件,無論顯示器分辨率設(shè)置是640X480,800X600還是1024X768,無論顯示器設(shè)置是在大字體還是小字體軟件都能正常運行,并且有美觀一致的界面。本人在用VB5.0設(shè)計《英語集成訓練系統(tǒng)V2.0》時,亦遇到這樣的麻煩。下面解釋克服這一問題的方法。
一:使界面居中
為了使界面元素能在各種顯示分辨率下均有合理的布局,一種方法就是獲取當前顯示分辨率,然后根據(jù)這一分辨率計算界面各元素的位置和大小,并進行設(shè)置。這種方法雖然能解決界面元素布局問題,但需要知道每個元素的位置和大小,程序煩瑣。
我這里采用的方法是:首先設(shè)計一個具有極大化,無邊界,無標題,無控制盒的窗體,然后在其上放置一個容器控件Picture,在Picture中再放置其它控件。在窗體Load事件中根據(jù)當前的顯示分辨率居中Picture,從而實現(xiàn)了居中整個界面。具體代碼如下:
PrivateSubForm_Load()
CallCenterControl(Picture1)
EndSub
PublicSubCenterControl(objAsObject)
Dimcx,cyAsSingle
cx=(Screen.Width/Screen.
TwipsPerPixelX-obj.Width)/2#
cy=(Screen.Height/Screen.
TwipsPerPixelY-obj.Height)/2#
obj.Left=cx
obj.Top=cy
EndSub
二:使界面適應大字體與小字體
Win95在創(chuàng)建控件時,會根據(jù)當前顯示屬性為大字體或小字體來作相應調(diào)整。盡管應用程序傳送的參數(shù)(控件位置和尺寸)是一致的,但實際控件的位置和尺寸在這兩種情形下并不一樣。如果應用程序僅僅考慮一般小字體的情況,在大字體下界面則十分難看混亂,甚至無法操作。為解決這一問題,首先應了解當前顯示器設(shè)置,這可通過系統(tǒng)注冊表來獲取。下面的程序采用了另一種方法:首先在一個映射模式為Pixel的窗體中放置一個控件,在顯示屬性為小字體的設(shè)計環(huán)境下首先看一下控件的初始位置x,y,然后在窗體的Load事件中計算出X和Y方向的放大比例xFac,yFac:
PrivateSubForm_Load()
xFac=400#/mmlhwnd.Left
yFac=400#/mmlhwnd.Top
EndSub
其中,mmllhwnd為放置在窗體中的控件,初始的坐標為400,400。
最后在各個需要調(diào)整界面的窗體Load事件中調(diào)用下列子程序,調(diào)整各控件的位置與大小:
PublicSubCorrectForm(fmAsForm)
DimCAsControl
ForEachCInfm.Controls
IfTypeOfCIsTimerThen
ElseIfTypeOfCIsCommonDialogThen
ElseIfTypeOfCIsLineThen
C.X1=C.X1*xFac
C.Y1=C.Y1*yFac
C.X2=C.X2*xFac
C.Y2=C.Y2*yFac
Else
C.Left=C.Left*xFac
C.Top=C.Top*yFac
IfTypeOfCIsSSCommandThen
C.Width=C.Width*xFac
C.Height=C.Height*yFac
C.FontSize=C.FontSize*xFac
ElseIfTypeOfCIsCommandButtonThen
C.Width=C.Width*xFac
C.Height=C.Height*yFac
C.FontSize=C.FontSize*xFac
ElseIfTypeOfCIsListBoxThen
C.Width=C.Width*xFac
C.Height=C.Height*yFac
C.FontSize=C.FontSize*xFac
ElseIfTypeOfCIsComboBoxThen
C.Width=C.Width*xFac
C.FontSize=C.FontSize*xFac
EndIf
EndIf
NextC
EndSub
上述程序中僅列舉了幾個典型的控件,如果窗體中還有其它類型的控件,仿造上述程序加入對這些控件類型的處理即可。
一:使界面居中
為了使界面元素能在各種顯示分辨率下均有合理的布局,一種方法就是獲取當前顯示分辨率,然后根據(jù)這一分辨率計算界面各元素的位置和大小,并進行設(shè)置。這種方法雖然能解決界面元素布局問題,但需要知道每個元素的位置和大小,程序煩瑣。
我這里采用的方法是:首先設(shè)計一個具有極大化,無邊界,無標題,無控制盒的窗體,然后在其上放置一個容器控件Picture,在Picture中再放置其它控件。在窗體Load事件中根據(jù)當前的顯示分辨率居中Picture,從而實現(xiàn)了居中整個界面。具體代碼如下:
PrivateSubForm_Load()
CallCenterControl(Picture1)
EndSub
PublicSubCenterControl(objAsObject)
Dimcx,cyAsSingle
cx=(Screen.Width/Screen.
TwipsPerPixelX-obj.Width)/2#
cy=(Screen.Height/Screen.
TwipsPerPixelY-obj.Height)/2#
obj.Left=cx
obj.Top=cy
EndSub
二:使界面適應大字體與小字體
Win95在創(chuàng)建控件時,會根據(jù)當前顯示屬性為大字體或小字體來作相應調(diào)整。盡管應用程序傳送的參數(shù)(控件位置和尺寸)是一致的,但實際控件的位置和尺寸在這兩種情形下并不一樣。如果應用程序僅僅考慮一般小字體的情況,在大字體下界面則十分難看混亂,甚至無法操作。為解決這一問題,首先應了解當前顯示器設(shè)置,這可通過系統(tǒng)注冊表來獲取。下面的程序采用了另一種方法:首先在一個映射模式為Pixel的窗體中放置一個控件,在顯示屬性為小字體的設(shè)計環(huán)境下首先看一下控件的初始位置x,y,然后在窗體的Load事件中計算出X和Y方向的放大比例xFac,yFac:
PrivateSubForm_Load()
xFac=400#/mmlhwnd.Left
yFac=400#/mmlhwnd.Top
EndSub
其中,mmllhwnd為放置在窗體中的控件,初始的坐標為400,400。
最后在各個需要調(diào)整界面的窗體Load事件中調(diào)用下列子程序,調(diào)整各控件的位置與大小:
PublicSubCorrectForm(fmAsForm)
DimCAsControl
ForEachCInfm.Controls
IfTypeOfCIsTimerThen
ElseIfTypeOfCIsCommonDialogThen
ElseIfTypeOfCIsLineThen
C.X1=C.X1*xFac
C.Y1=C.Y1*yFac
C.X2=C.X2*xFac
C.Y2=C.Y2*yFac
Else
C.Left=C.Left*xFac
C.Top=C.Top*yFac
IfTypeOfCIsSSCommandThen
C.Width=C.Width*xFac
C.Height=C.Height*yFac
C.FontSize=C.FontSize*xFac
ElseIfTypeOfCIsCommandButtonThen
C.Width=C.Width*xFac
C.Height=C.Height*yFac
C.FontSize=C.FontSize*xFac
ElseIfTypeOfCIsListBoxThen
C.Width=C.Width*xFac
C.Height=C.Height*yFac
C.FontSize=C.FontSize*xFac
ElseIfTypeOfCIsComboBoxThen
C.Width=C.Width*xFac
C.FontSize=C.FontSize*xFac
EndIf
EndIf
NextC
EndSub
上述程序中僅列舉了幾個典型的控件,如果窗體中還有其它類型的控件,仿造上述程序加入對這些控件類型的處理即可。