对于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,则您的计算机屏幕显示模式将被设置为原来的显示模式。此程序稍加修改,即可放置于桌面或任务栏中,直接快捷的修改屏幕设置。->
|