VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 动态改变屏幕设置
发表评论(0)作者:, 平台:, 阅读:10222, 日期:2000-03-12
动态改变屏幕设置

我们经常看到许多 Win95 的应用程序(尤其是游戏)在运行它的时候改变屏幕的设置,

运行完后恢复,在 VB 中,我们可以用以下方法实现:

'- 定义

Private Declare Function lstrcpy _

Lib "kernel32" Alias "lstrcpyA" _

(lpString1 As Any, lpString2 As Any) _

As Long

Const CCHDEVICENAME = 32

Const CCHFORMNAME = 32

Private Type DEVMODE

dmDeviceName As String * CCHDEVICENAME

dmSpecVersion As Integer

dmDriverVersion As Integer

dmSize As Integer

dmDriverExtra As Integer

dmFields As Long

dmOrientation As Integer

dmPaperSize As Integer

dmPaperLength As Integer

dmPaperWidth As Integer

dmScale As Integer

dmCopies As Integer

dmDefaultSource As Integer

dmPrintQuality As Integer

dmColor As Integer

dmDuplex As Integer

dmYResolution As Integer

dmTTOption As Integer

dmCollate As Integer

dmFormName As String * CCHFORMNAME

dmUnusedPadding As Integer

dmBitsPerPel As Integer

dmPelsWidth As Long

dmPelsHeight As Long

dmDisplayFlags As Long

dmDisplayFrequency As Long

End Type

Private Declare Function _

ChangeDisplaySettings Lib _

"User32" Alias "ChangeDisplaySettingsA" (_

ByVal lpDevMode As Long, _

ByVal dwflags As Long) As Long

'- 函数

Public Function SetDisplayMode(Width As _

Integer,Height As Integer, Color As _

Integer) As Long

Const DM_PELSWIDTH = &H80000

Const DM_PELSHEIGHT = &H100000

Const DM_BITSPERPEL = &H40000


Dim NewDevMode As DEVMODE

Dim pDevmode As Long

With NewDevMode

.dmSize = 122

If Color = -1 Then

.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT

Else

.dmFields = DM_PELSWIDTH Or _

DM_PELSHEIGHT Or DM_BITSPERPEL

End If

.dmPelsWidth = Width

.dmPelsHeight = Height


If Color <> -1 Then

.dmBitsPerPel = Color

End If

End With

pDevmode = lstrcpy(NewDevMode, NewDevMode)

SetDisplayMode = ChangeDisplaySettings(pDevmode, 0)

End Function

例子调用:改变为 640x480x24位:

i = SetDisplayMode(640, 480, 24)

如果成功返回 0 。