用哪个API 动态改变屏幕的分辨率??(回答立即给分)
我想在我的程序运行的时候,改变屏幕的分辨率。当我的程序退出后再恢复分辨率!
回答立即给分)
问题点数:50、回复次数:4Top
1 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-11-23 22:25:06 得分 10
http://expert.csdn.net/Expert/topic/846/846849.xml?temp=.2693903Top
2 楼junwhj(http://www.grid2000.com/cn)回复于 2002-11-23 22:43:11 得分 20
Option Explicit
Private Declare Function EnumDisplaySettings _
Lib "user32" Alias "EnumDisplaySettingsA" ( _
ByVal lpszDeviceName As Long, _
ByVal iModeNum As Long, _
lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings _
Lib "user32" Alias "ChangeDisplaySettingsA" ( _
lpDevMode As Any, _
ByVal dwflags As Long) As Long
Private Type DEVMODE
dmDeviceName As String * 32
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 * 32
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFREQUENCY = &H400000
Private Sub ChangeRes(lngPelsWidth As Long, _
lngPelsHeight As Long, _
intBitsPerPel As Integer, _
lngDisplayFrequency As Long)
Dim dm As DEVMODE
Call EnumDisplaySettings(0&, -1, dm)
dm.dmFields = DM_PELSWIDTH Or _
DM_PELSHEIGHT Or _
DM_BITSPERPEL Or _
DM_DISPLAYFREQUENCY
dm.dmPelsWidth = lngPelsWidth
dm.dmPelsHeight = lngPelsHeight
dm.dmBitsPerPel = intBitsPerPel
dm.dmDisplayFrequency = lngDisplayFrequency
Call ChangeDisplaySettings(dm, 1)
End Sub
Private Sub Command1_Click()
Call ChangeRes(800, 600, 16, 75) '75是刷新率
End Sub
Private Sub Form_Load()
End Sub
Top
3 楼dragon525()回复于 2002-11-23 22:43:20 得分 0
I know!
谢谢你!
我得仔细的看看!Top
4 楼SeeMeStudio(小章)回复于 2002-11-24 00:14:13 得分 20
详细的代码示范,请看。
‘---------------以下代码用于得到屏幕的设置参数--------------
Declare Function GetDeviceCaps Lib
"gdi32" (ByVal hdc As Long,
ByVal nIndex As Long) As Long
‘取指定设备信息API函数
Public Const HORZRES = 8
‘三个屏幕常量
Public Const VHORZRES = 10
Public Const BITSPIXEL = 12
‘---------------通过字符COPY进行数据类型转换--------------
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
‘------------------设置屏幕的核心API-----------------
Private Declare Function ChangeDisplaySettings
Lib "User32" Alias "ChangeDisplaySettingsA"
(ByVal lpDevMode As Long, ByVal dwflags As Long) As Long
‘------------------设置屏幕的函数-----------------
Public Function SetDispMode(Width As Integer,
Height As Integer, Color As Integer) As Long
(SetDispMode是自己构造的更改屏幕设置的函数来,
它的三个参数Width、Height和Color分别是屏幕的横向分辨率、
纵向分辨率,颜色位数,其值可为24,16,0等。0为原有颜色设置。)
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 = 0 Then
‘如果Color=0则只改变屏幕的分辨率,而不改变色彩。
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
Else
‘如果Color不等0则改变屏幕的分辨率和色彩。
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
End If
.dmPelsWidth = Width
.dmPelsHeight = Height
If Color < > 0 Then
.dmBitsPerPel = Color
End If
End With
pDevmode = lstrcpy(NewDevMode, NewDevMode)
‘得到一个指向NewDevMode结构的Long型的指针。
ChangeDisplaySettings pDevmode, 0
End Function
---- 三、在工程窗体中,加入两个按钮Command1和Command2,其Caption属性分别为“800x600x16”和“恢复原设置”。
---- 其程序代码为:
‘窗口的“通用|声明”区
Option Explicit
Dim H, V, Color As Long
’声名变量,用于保存最初屏幕设置
Private Sub Form_Load()
‘---------------以下代码用于得到最初的屏幕设备--------------
H = GetDeviceCaps(Form1.hdc, HORZRES)
V = GetDeviceCaps(Form1.hdc, VHORZRES)
Color = GetDeviceCaps(Form1.hdc, BITSPIXEL)
End Sub
Private Sub Command1_Click()
‘调用SetDispMode函数改变屏幕设置
SetDispMode 800, 600, 16
End Sub
Private Sub Command2_Click()
‘恢复最初屏幕设置
SetDispMode Cint(H), Cint(V), Cint(Color)
End Sub
---- 四、将程序编译执行。
Top




