對於Windows平台,顯示器的分辯率和顏色數很重要,尤其是對於多媒體應用軟件和游戲軟件。但許多情況下,用戶當前的屏幕設置並不適合軟件的運行需要。軟件通常的做法是提示用戶將屏幕設置到軟件要求的分辯率及顏色數,再重新啟動軟件。這樣無疑會增加普通用戶操作上的負擔和困難,降低了軟件的友好性和易用性。
----理想的作法是:在軟件開始時,動態的改變屏幕設置來達到軟件運行的要求。在軟件運行結束後,再自動把屏幕設置改回原來的設置值。這一切過程都在不知不覺中完成。這一做法可以通過在VB中調用API(應用程序接口)函數做到。實現方法如下:
----一、打開一個標准的EXE工程。
----二、在“工程”菜單欄下,選取“添加模塊”,為工程添加一個模塊。
----並在模塊中添加如下代碼:
‘---------------以下代碼用於得到屏幕的設置參數--------------
DeclareFunctionGetDeviceCapsLib
"gdi32"(ByValhdcAsLong,
ByValnIndexAsLong)AsLong
‘取指定設備信息API函數
PublicConstHORZRES=8
‘三個屏幕常量
PublicConstVHORZRES=10
PublicConstBITSPIXEL=12
‘---------------通過字符COPY進行數據類型轉換--------------
PrivateDeclareFunctionlstrcpyLib"kernel32"
Alias"lstrcpyA"(lpString1AsAny,lpString2AsAny)AsLong
‘------------------以下結構用於屏幕的初始化-----------------
ConstCCHDEVICENAME=32
ConstCCHFORMNAME=32
PrivateTypeDEVMODE
dmDeviceNameAsString*CCHDEVICENAME
dmSpecVersionAsInteger
dmDriverVersionAsInteger
dmSizeAsInteger
dmDriverExtraAsInteger
dmFieldsAsLong
dmOrientationAsInteger
dmPaperSizeAsInteger
dmPaperLengthAsInteger
dmPaperWidthAsInteger
dmScaleAsInteger
dmCopiesAsInteger
dmDefaultSourceAsInteger
dmPrintQualityAsInteger
dmColorAsInteger
dmDuplexAsInteger
dmYResolutionAsInteger
dmTTOptionAsInteger
dmCollateAsInteger
dmFormNameAsString*CCHFORMNAME
dmUnusedPaddingAsInteger
dmBitsPerPelAsInteger
dmPelsWidthAsLong
dmPelsHeightAsLong
dmDisplayFlagsAsLong
dmDisplayFrequencyAsLong
EndType
‘------------------設置屏幕的核心API-----------------
PrivateDeclareFunctionChangeDisplaySettings
Lib"User32"Alias"ChangeDisplaySettingsA"
(ByVallpDevModeAsLong,ByValdwflagsAsLong)AsLong
‘------------------設置屏幕的函數-----------------
PublicFunctionSetDispMode(WidthAsInteger,
HeightAsInteger,ColorAsInteger)AsLong
(SetDispMode是自己構造的更改屏幕設置的函數來,
它的三個參數Width、Height和Color分別是屏幕的橫向分辨率、
縱向分辨率,顏色位數,其值可為24,16,0等。0為原有顏色設置。)
ConstDM_PELSWIDTH=&H80000
ConstDM_PELSHEIGHT=&H100000
ConstDM_BITSPERPEL=&H40000
DimNewDevModeAsDEVMODE
DimpDevmodeAsLong
WithNewDevMode
.dmSize=122
IfColor=0Then
‘如果Color=0則只改變屏幕的分辨率,而不改變色彩。
.dmFields=DM_PELSWIDTHOrDM_PELSHEIGHT
Else
‘如果Color不等0則改變屏幕的分辨率和色彩。
.dmFields=DM_PELSWIDTHOrDM_PELSHEIGHTOrDM_BITSPERPEL
EndIf
.dmPelsWidth=Width
.dmPelsHeight=Height
IfColor<>0Then
.dmBitsPerPel=Color
EndIf
EndWith
pDevmode=lstrcpy(NewDevMode,NewDevMode)
‘得到一個指向NewDevMode結構的Long型的指針。
ChangeDisplaySettingspDevmode,0
EndFunction
----三、在工程窗體中,加入兩個按鈕Command1和Command2,其Caption屬性分別為“800x600x16”和“恢復原設置”。
----其程序代碼為:
‘窗口的“通用|聲明”區
OptionExplicit
DimH,V,ColorAsLong
'聲名變量,用於保存最初屏幕設置
PrivateSubForm_Load()
‘---------------以下代碼用於得到最初的屏幕設備--------------
H=GetDeviceCaps(Form1.hdc,HORZRES)
V=GetDeviceCaps(Form1.hdc,VHORZRES)
Color=GetDeviceCaps(Form1.hdc,BITSPIXEL)
EndSub
PrivateSubCommand1_Click()
‘調用SetDispMode函數改變屏幕設置
SetDispMode800,600,16
EndSub
PrivateSubCommand2_Click()
‘恢復最初屏幕設置
SetDispModeCint(H),Cint(V),Cint(Color)
EndSub
----四、將程序編譯執行。
----本程序執行後,如果單擊Command1,則您的計算機屏幕顯示模式將被設置為“800x600x16”的顯示模式;如果單擊Command2,則您的計算機屏幕顯示模式將被設置為原來的顯示模式。此程序稍加修改,即可放置於桌面或任務欄中,直接快捷的修改屏幕設置。->