说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中改变显示器的分辨率

HTML文档下载 WORD文档下载 PDF文档下载
在VB中改变显示器的分辨率
重庆邮电学院
徐原
---- 有一些游戏如《Delta Force》可以让玩家在玩游戏时改变显示器的分辨率,现在介绍一种在VB中实现的方法。

---- 这里要用到一个在VB的API浏览器中没有的函数,声明如下:

---- Private Declare Function ChangeDisplaySettings Lib "user32" Alias_ "ChangeDisplaySettingsA" (ByVal lpDevMode As Long, ByVal dwflags As Long) As Long

---- 第一个参数指向一个DEVMODE结构,第二个参数为一些标志,这些标志有:


标志
含义
0
当前屏幕的图形模式将被动态地改变
CDS_UPDATEREGISTRY
当前屏幕的图形模式将被动态地改
变并且注册表里的屏幕分辨率的值也_
被更新
(注册表中保存有屏幕的分辨率及相关属性
,以便以后开机或重_
起时加载),
在USER文件中也保存该模式

CDS_TEST 仅供系统测试,
看这种图形模式是否能够正常

CDS_FULLSCREEN 临时改变
Windows NT:
如果切换到另外的桌面,该模式不会被保存

CDS_GLOBAL
该设置将被保存在全局设置区内,对所有用户都起作用

CDS_SET_PRIMARY
设置该设备为私有设备,这里对屏幕对象不起作用

CDS_RESET 恢复以前的设置


声明:
Private Declare Function
lstrcpy Lib "kernel32"
Alias "lstrcpyA" (lpString1 As_
Any, lpString2 As Any) As Long

Private Declare Function ChangeDisplaySettings
Lib "user32" Alias_
"ChangeDisplaySettingsA" (ByVal lpDevMode As Long,
ByVal dwflags As Long) As Long

Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32

Private Type DEVMODE’详细参考MSDN
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

Public Function SetScreen
(Width As Integer,
Height As Integer, Optional Color
As Integer = 16) As Long'这里的
16指的是真16色
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_BITSPERPEL = &H40000
Dim NewDevMode As DEVMODE
Dim pDevmode As Long

With NewDevMode
.dmSize = Len(NewDevMode)'一般为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


Private Sub Change_Click()
SetScreen Val(Text1), Val(Text2), Val(Text3)
End Sub

’下面三个文本框分别存放分辨率和颜色值
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
End Sub

Private Sub Text2_GotFocus()
Text2.SelStart = 0
Text2.SelLength = Len(Text1)
End Sub

Private Sub Text3_GotFocus()
Text3.SelStart = 0
Text3.SelLength = Len(Text1)
End Sub


该程序在VB6.0企业版下调试通过。

大数据基准测试专题论坛:基准测试是一把尚未完成的尺子 大数据应用(下):应用驱动技术,DaaS创造价值 大数据研究与发展专题论坛:大数据在各领域中的应用及发展策略 雅虎新目标:欲收购照片分享网站Imgur 移动开发工具访谈《近匠》第01期:七牛云存储—BaaS进化论 我刚学PB,请问两个表在一个Datawindow一起显示,怎么做? 如何批量改名 救急救急................. 七个月没有给工资怎么办 SELECT * FROM MRTABLE WHERE X-FIELD LIKE //后面TEXT1.TEXT 为字符型 sql语句如何写? 急,DateTime.Now为什么获得的时间是11/25/2003 1:43:25 PM 急!!!我在winxp下点不开bs小系统网页,在2000下是好的!不知道是为什么? 基于Rational Rose 的文档自动生成和管理工具——Document Builder 在“走进田园”的综合性学习活动中,我们对乡村生活和 电阻R1=7欧,R2=5欧,串联后接在12伏的电源 一个400字关于雾霾的作文 一个正方形,如果边长增加2米,那么它的面积增加20 有什么鸡尾酒,又好喝,度数又高的!泡女的! 鸡尾酒的度数大约多少度啊? 鸡尾酒跟啤酒哪个度数高些?平时喝什么好呢? 乡村生活和田园景物越多越好 我了解的乡村生活和田园景色只要一段话 CBA测折返跑孙悦轻松达标 马布里场中国铁建回应“天价招待费”今年招待费美白宫称政治僵局令就业人数少增加12女子遇劫匪镇定应对 谈人生谈理想要回统计局:经济稳中有升稳中向好 不确定美国经济不堪一击,国际市场浮现更多的脑洞大开:未来的人工智能,将是“迫使小米发布了“大而持久”的小米Max,今日嗅评:支持百度的初衷是国产,放弃沪指微涨0.02% A股止跌黎明前的与南宋同行韩娱之平凡之路干物妹也要当漫画家传奇末纪元请回答2013梦泉旅游止锚湾碣石旅游涟源旅游旬阳太极城旅游兴化禅寺旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘