【VB开源代码栏目提醒】:网学会员VB开源代码为您提供VB程序在不同分辨率下的正确显示VB程序Vb分辨率vb程序在不同 - 产品手册参考,解决您在VB程序在不同分辨率下的正确显示VB程序Vb分辨率vb程序在不同 - 产品手册学习中工作中的难题,参考学习。
第 23 卷第 2 期 大 连轻 工业 学院 学报 Vol. 23 No. 22 00 4年6 月 Journal of Dal ian Institute of Light Industry Jun. 2 0 0 4文章编号: 1005 4014 2004 02 - - -0129 04 X
VB 程序在不同分辨率下的正确显示 1 2 孟桂颖 刘素英 1. 大连外国语学院 国际艺术学 院 辽宁 大连 116002 2. 辽宁石化职业技术学院 辽宁 锦州 121001 关键词: V B 程序 分辨率 显示模式 摘要: 运行
VB 开发的应用程序时 如果用户计算机的分 辨率设置 与开发 环境不 同 V B 程序的 外 观就会发 生改变 有时会导致程序不能运行。
针对 此
问题 提出了 2 种解决 方案 使 V B 程序主 动 适应用户的分辨率或更改用户的分辨率来适应 V B 程序。
中图分类号: T P311 文献标识码: A Correct displaying of Visual Basic program under different resolutions MEN G Gui yi ng 1 LI U Su ing 2 - -y 1. School of Inter national Art Science Dalian U niversit y of F oreign Language Dalian 116002 China 2. L iaoning Petrolchemical V ocational T echnical Colleg e Jinzhou 121001 ChinaKey
words: Visual Basic resolut ion displaying modeAbstract: If the resolut ion setup in
VB programm ing is relevant to t he environment of development appear -ance of the program displaying w ould be changed. Som et imes it might result in
miss funct ion. T w o kindsof remedy met hods are proposed as follow s: adapting the
VB program to the resolut ion set by t he useradapt ing t he resolut ion t o t he
VB prog rame. 目前
计算机支持的分辨率 有很多种 用
VB 和 T w ipsPerPixelY 这 2 种属性只与硬件有关 而开发的程序 不能自动适应不同的分辨率设置 在 与屏幕上 可设定的分辨 率无关。
将 Widt h 除以一种特定环境下精心设计的界面 在另外一台不 T w ipsPerPixelX 可以 计算出 屏幕的 水平分 辨率同分辨率设置的机上运行时 程序的外观就会发 像素数 同样将 H eight 除以 T w ipsPerP ix elY 也生改变: 800 600 下的窗体在 1024 768 下会变 可以计算出屏幕的 垂直分辨率 2 。
要 想保持一小 1024 768 下的窗体在 800 600 下会发生切 个窗口或是控件的物理大小不变 只要计算出设割现象 导致程序不能正常运行 这是因为在不同 计时的分辨率与实际运行时的分辨率的比值 然的分辩率下
VB 程序不会主动适应这种变化 从 后根据这个比值来调节窗口和其中的控件的大小而使窗体及窗体内控件的大小和位置都会发生变 和相对位置 以及显示的字体尺寸 就可以保持同化 1 。
针对
VB 程序本身存在的缺陷 本文作者 一应用程序的窗口在不同的系统下的物理外观。
提供了 2 种实用的
方案。
根据这一原理 可以编制一个通用的模块 在应用 程序中调用该模块就能解决这一难题。
1 V B 程序主动适应用户的分辨率 1. 1 主动适应用户的程序流程图 在 Visual Basic 应用
程序中 屏幕 Screen 是 如图 1 所示。
一个对象。
其 Width 和 Height 属性以 T w ip 为单 1. 2 主动适应用户的程序
代码位反映出屏幕的宽度和高度。
而 T w ipsPerPixelX . 通用模块 X 收稿日期: 2004 02 21 - - 作者简介: 孟桂颖 1962 女 副教授. 130 大 连 轻 工 业 学 院 学 报 第 23 卷 控件的大小 If XFactor 1 And YF act or 1 T hen fbl 0 Else: f bl 1 End If End Sub Public Sub ResizeForm FormName As Form . 按比例缩放窗体上的控件 Dim Pos 4 As Double Dim i As Long T empPos As Long St art Pos As L ong Dim Obj As Control Dim ScaleX As Double ScaleY As Double ScaleX suiping/ 1024 . 保存窗体宽度缩 放比例 ScaleY cuizhi/ 768 . 保存窗体高度缩放 比例 图1 主动适应用户的程序流程图 On Error Resume Nex t Public fbl As Int eger. 判断分辩率是否变化的 F or Each Obj In FormName全局变量 变化了为 1 否则为 0 St art Pos 1 Public suiping As Int eger. 当前系统水平分辩 F or i 0 T o 4 . 读取控件的原始位置率 与大小 Public cuizhi As Int eger. 当前系 统垂直分辩 T empPos InSt r St art Pos Obj. T ag / 0率 vbT ex tCompare Sub SetDeviceIndependent Window T hisF orm If T empP os 0 T henAs Form . 判断当前用户的分辩率是否发生了变 Pos i Mid Obj. T ag StartPos T em pPos化 如果变化 fbl 1. 否则 fbl 0 - StartPos Dim Obj As Cont rol. Control 是一个对象 表 St art Pos T empPos 1示所有 Visual Basic 内部控件的类名 Else Dim DesignX As Integer. 代表设计系统的水 Pos i 0平分辨率 End If Dim DesignY As Integer. 代表设计
系统的垂 . 根据控件的原始位置及窗体改变大小的比直分辨率 例对控件重新定位与改变大小 Dim XFact or As Sing le. 水平比例因子 - Obj. Move Pos 0 ScaleX Pos 1 Sca Dim YFactor As Single. 垂直比例因子 leY Pos 2 ScaleX Pos 3 ScaleY Dim X As Integer Next i DesignX 1024: DesignY 768 .假 Next Obj设
设计时的分辨率为 1024 768 On Error GoT o 0 . 计算当前屏幕尺寸与设计时使用的屏幕尺 End Sub寸的比值 Public Sub ResizeInit F ormName As Form . XFactor Screen. Width/ Screen. T w ipsPer - 保存窗体上控件的坐标及大小P ix elX / Desig nX Dim Obj As Cont rol . Cont rol 是一个对象 表 YF act or Screen. H eight/ Screen. T w ipsPer - 示所有 V isual Basic 内部控件的类名P ix elY / DesignY On Error Resume Nex t . 如果这两个比值均为 1 则不必调节窗体或 F or Each Obj In FormName第2期 孟桂颖等:
VB 程序在不同分辨率下的正确显示 131 Obj. T ag Obj. Left / 0 Obj. T op / 如一些多媒体应用程序及大型游戏程序的开发0 Obj. Width / 0 Obj. Heig ht / 0 . T ag 特别是
VB 需要调用录象文件 . avi 等格式 这返回或设置一个表达式用来存储程序中需要的额 时采用第 1 种方法 会使程序更加复杂 可以采用 4外数据。
调用 Window s API 函数 的方法更改用户的分 Next Obj 辨率以适应程序的需要 5 。
首先利 用 EnumDis- On Error GoT o 0 playSett ings 获得当前系统的显示模式 然后调用 End Sub ChangeDisplaysett ings 更改系统的分辨率。
1. 3 示例程序 2. 1 更改用户分辨率的程序流程图 在 1024 768 分辨率下新建一个
VB 工程 如图 2 所示。
在窗体上放一个 Shockw aveFlash 控件 一个 com -mandbut ton 控 件 和 一 个 t ex t 控 件。
command -butt on 控件的 capt ion 属性设置 为结束 t ex t1 控件的 mult iline 属性设为 true。
在
代码区域加入如下
代码: Private Sub Command1 Click End End Sub Private Sub Form L oad Call SetDeviceIndependent Window Me . 判断当前分辩率和设计时的分辩率是否相同 - suiping Screen. Widt h/ Screen. T w ipsPerP ixelX. 计算当前的水平分辩率 - cuizhi Screen. Height / Screen. T w ipsPerP ixelY-计算当前的垂直分辩率 if fbl then. 当前分辩率和设计时的分辩率不相同 图2 更改用户分辨率的程序流程图 Call ResizeInit M e . 保存原来的坐标值 2. 2 更改用户分辨率的程序
代码 Call ResizeForm M e . 按比例缩放 在 form1
代码窗口中加入以下语句即可。
- T ex t1. F ont Size T ex t1. FontSize suip -以下是声明语句ing / 1024 . 字体作相应的调整 Private Declare Funct ion EnumDisplaySet t ings End If Lib 0user320 Alias 0 EnumDisplay Sett ingsA0 By- M e. T op 0 Val lpszDeviceName As L ong ByVal iModeNum M e. Left 0 As L ong lpDevM ode As Any As BooleanM e. Heig ht Screen. Heig ht Private Declare Funct ion ChangeDis- M e. Widt h Screen. Width playSett ings L ib 0 user32 0 Alias 0 ChangeDis- Shockw aveFlash1. M ovie App. Pat h 0 playSett ingsA 0 lpDevMode As Any ByVal11. swf0 dwF lags As L ong As Long Shockw aveFlash1. Play ing T rue Const CDS UPDAT EREGIST RY H1 T ex t1. T ex t 0 保持程序外观不变0 Const DM BIT SP ERP EL H40000 End Sub Const DM PEL SWIDT H H 80000 在不同的分辨率下运行该程序 发现程序的 Const DM PEL SHEIGHT H 100000外观保持不变。
Const DISP CHANGE SU CCESSFUL 02 更改用户分辨率适应
VB 程序 Const DISP CHANGE REST ART 1 Private T y pe DEVM ODE 如果
VB 程序界面元素较多 调用关系复杂 dmDeviceName As St ring 32 132 大 连 轻 工 业 学 院 学 报 第 23 卷 dmSpecVersion As Integer . CDS_UPDAT EREGIST RY 表示 当 前 屏 幕 dmDriverVersion As Int eger 的分辨率将被改变并且
注册表里的屏幕分辨率的 dmSize As Int eger 值也被更新 dmDriverExt ra As Integ er If a DISP_CHANGE_SUCCESSF UL dmFields As L ong T hen dmOrientation As Integer myex it MsgBox 0 计 算机 不支 持 该模 式 dmPaperSize As Integ er 退出吗0 vbYesNo vbEx clamat ion 0退出0 dmPaperL eng th As Int eger If myex it vbYes T hen dmPaperWidth As Integ er End dmScale As Int eger End If dmCopies As Int eger End If dmDef ault Source As Integ er End If dmPrint Quality As Int eger End Sub dmColor As Int eger dmDuplex As Integer 3 结 论 dmYResolution As Integer 在实际应用中 采用上述的哪种方法更合理 dmT T Opt ion As Int eger 应用环境、 应视程序的规模、 用户的要求等多种因 dmCollat e As Integer 数而定 3 。
在第 1 种方法中模块不能自动改变字 dmFormName As String 32 体的变化 如有涉及字体的变化时 参照上述示例 dmUnusedP adding As Int eger 中文 本 框 的 方 法 更 改。
如 T ex t1. Font Size dmBitsP erPel As Integer T ex t1. Font Size suiping/ 1024 。
另外 必须在 dmPelsWidth As L ong 启动窗体中给 2 个全局变量赋初值。
第 1 种方法 dmPelsHeight As L ong 程序实现起来简单 不管用户的设置如何 程序运 dmDisplayFlags As Long 行开始 就强制把用户的分辨率改变成程序运行 dmDisplayFrequency As L ong 所需要的设置。
End T ype . 判断、 更改分辨率 参考文献: Private Sub Form L oad If Screen. Widt h / Screen. T w ipsPerP ix elX 1 周轶峰 杨建 新. Visual Basic 6. 0 实用编程技术 M . 1024 T hen . 1024 768 是想要设置的分辨率 北京: 中国水 利水电出版社 1999. Dim DM1 As DEVM ODE 2 罗健军. V GA 实用编程技术 M . 北京: 清华大学 出 Dim a As Long 版社 1996. a EnumDisplaySet t ing s 0 0 DM1 . 3 钟玉琢. 多媒体技 术基础及 应用 M . 北京: 清华 大 DM1. dmFields DM_PELSWIDTH 学出版社 2000. . 4 王菊英. 在 V B 开发环 境定 制插 件 J . 计算 机应 用 DM1. dmPelsWidth 1024 研究 1999 2 : 301- 302. DM1. dmPelsHeight 768 5 方淑英. 几种 常见的 窗体特 效技巧 J . 电 脑编程 技 a Chang eDisplaySet t ing s DM 1 CDS_UP- 巧与维护 2004 2 : 33- 37.DAT EREGIST RY