由于开发的系统需要在15寸、17寸、19寸显示器的电脑上使用,因此15寸开发的系统拿到17寸上用,右边和下边就会出现空白,很难看。
我使用form resize控制,但控件(尤其是text和combo控件)太多,不好调整,而且控件之间的间隙也无法调整,大家有没有什么行之有效的方法,请给我参考参考,提供一个思路备注:我想过根据分辨率调整的方法,但如何获得显示器的分辨率呢??
我使用form resize控制,但控件(尤其是text和combo控件)太多,不好调整,而且控件之间的间隙也无法调整,大家有没有什么行之有效的方法,请给我参考参考,提供一个思路备注:我想过根据分辨率调整的方法,但如何获得显示器的分辨率呢??
Debug.Print Screen.Width \ Screen.TwipsPerPixelX, Screen.Height \ Screen.TwipsPerPixelY
End Sub
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Dim x As String
Dim y As StringPrivate Sub Form_Load()
x = Str(GetSystemMetrics(SM_CXSCREEN))
y = Str(GetSystemMetrics(SM_CYSCREEN))
Debug.Print "当前屏幕分辨率:" + x + "×" + y
End Sub
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Sub Command1_Click()
'Get information about the screen's width
Debug.Print GetDeviceCaps(Form1.hdc, 8)
'Get information about the screen's height
Debug.Print GetDeviceCaps(Form1.hdc, 10)
End Sub
窗口中能摆放控件的区域叫客户区
Width、Height属性是窗口大小(算上了标题栏的大小)
只有ScaleHeight、ScaleWidth属性才是客户区大小
这一点在设置了ScaleMode属性后体现的最明显为什么要在ReSzie事件中改变大小
这是为了能让用户可以在运行时改变窗口大小
而“运行时改变窗口大小”的功能是窗口的基本功能
如果你的程序无法做到这一点
就给人一种不专业的感觉(至少我将绝不用那样的软件)
所以一定要锻炼在ReSzie事件中调整控件坐标的能力
对于控件之间有间隙
可以先定义一个常数来说明控件之间的标准间隙大小
然后在计算控件坐标的时候也算上该常数
只是数学运算稍微麻烦了一点而已其实一般的界面都是分成几块的
如资源管理器分为上面的工具栏区域(ReBar控制项)和下面的TreeView、ListView区域
它在处理ReSzie事件时只需修改ReBar控制项的宽度以及下面的TreeView、ListView控制项的位置
由于ReBar控制项会自动修改其中的工具栏的位置,于是程序员不需要操心从上面那个例子可看出
由于一般的界面都是分成几块区域的
只有区域本身需要修改位置
区域中的控件大多不需要修改位置
所以其实在窗口中真正需要手动算坐标的其实很少可以在VB中利用这种思想
可将控件放入不同的PictureBox中
特别是PictureBox有Align属性
可以进一步的减少代码量假若PictureBox中的控件需要定位
则应在PictureBox的ReSize事件中定位控件(注意此时别在Form的ReSize事件定位,那是人为制造难度)
区域大小也应根据PictureBox的ScaleHeight、ScaleWidth属性
此时With语句的作用就很重要了(如在“With PicLeft”块中写定位代码)
注意这时为了减少PictureBox所占资源
应将其AutoRedraw、HasDC属性都设为False
http://community.csdn.net/Expert/topic/4508/4508722.xml?temp=.5785791