点击上方蓝字关注我们
好久没有写文章了主要是因为最近太忙了,准备考考四级看看
。当然在忙也要来点干货,今天我们来说说VB中如何实现自适应布局,因为小窗口中显示有点丑不能全屏显示,这时我们就需要用到自适应布局,无论窗口最大化还是窗口标准化,其内容都要自适应,那么说了这么多这么样实现呢?
本文从以下几点进行说明:
- 全部控件自适应
- 背景图片自适应
- 单个控件自适应
- 最终效果展示
其实很简单,我们只需要把下面的代码粘贴上去就搞定
全部控件自适应
'实现响应式布局'控件随着窗体自适应居中Option Explicit '创建变量 Private ObjOldWidth As Long '保存窗体的原始宽度 Private ObjOldHeight As Long '保存窗体的原始高度 '窗体显示控制(让程序集窗口显示)Public Sub Form3Shon() Form3.Show '以上的条件执行完毕后将登陆页面显示 Me.Hide '将本页面隐藏 Unload Me '最终将该窗体卸载End Sub '当窗体改变时触发(第二调用) Private Sub Form_Resize() '确保窗体改变时控件随之改变 Call ResizeForm(Me) '背景图片自适应函数 Call bgImgAdptive '如果点击最大化按钮则加载外部图片 '窗体改变后居中 'Me.WindowState = 0 End Sub'窗体部分(第一调用)Private Sub Form_Load() '让该窗体居中 Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 '调用ResizeInit()函数并传入参数 Call ResizeInit(Me) Timer1.Interval = 350 Timer1.Enabled = True '第一次加载就隐藏防止界面抖动 Image5.Visible = False Image4.Visible = False Image3.Visible = False Image2.Visible = False Image1.Visible = FalseEnd Sub'窗体加载后首先调用它保存当前窗体的信息,获取当前窗体的ScaleWidth、Left、Top、Width、HeightPublic Sub ResizeInit(FormName As Form) Dim Obj As Control ObjOldWidth = FormName.ScaleWidth ObjOldHeight = FormName.ScaleHeight '如果抛出错误则继续执行下一行 On Error Resume Next For Each Obj In FormName Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " " Next Obj '如果抛出错误则显示"出错信息"并停止程序的执行 On Error GoTo 0End Sub'按比例改变窗体内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数Public Sub ResizeForm(FormName As Form) Dim Pos(4) As Double Dim i As Long, TempPos As Long, StartPos As Long Dim Obj As Control Dim ScaleX As Double, ScaleY As Double ScaleX = FormName.ScaleWidth / ObjOldWidth '保存窗体宽度缩放比例 ScaleY = FormName.ScaleHeight / ObjOldHeight '保存窗体高度缩放比例 '如果抛出错误则直接执行下一行 On Error Resume Next For Each Obj In FormName StartPos = 1 For i = 0 To 4 '读取控件的原始位置与大小 TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare) If TempPos > 0 Then Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos) StartPos = TempPos + 1 Else: Pos(i) = 0 End If '根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小 Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next i Next ObjEnd Sub
不过需要说明的是自适应布局不是万能的,有些地方最好还是别用自适应布局,因为对于有些控件这个自适应布局是不管用的倒反控件可能会被压缩导致无法满足您的需求,你要灵活去应用。
背景图片自适应
除了全局控件自适应布局,我们有些时候还想让背景图片自适应,我们可以用以下的代码进行自适应背景图片。
Me.AutoRedraw = TrueMe.PaintPicture Me.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight '背景图片自适应的公共函数Public Sub bgImgAdptive() Me.AutoRedraw = True Me.PaintPicture Me.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeightEnd Sub
单个控件自适应
有些时候你只想让某一个控件自适应,我们可以用下面的代码进行自适应:'’
'Form_Resize()函数会在窗口大小改变时触发Private Sub Form_Resize()Frame1.Move 60, 30, Form1.ScaleWidth - 120, Form1.ScaleHeight - 120Command1.Move (Frame1.Width - Command1.Width) / 2, (Frame1.Height - Command1.Height) / 2End Sub
最终效果
最大化效果
最小化效果
我就知道你“在看”