在VB中,如何让背景图片铺满整个Form是一件不难的事,网上也很许多现成的代码,在回答一个csdn网友的问题时,我就写了一段这样的代码:
Me.ScaleMode = vbPixels
Me.Image1.Visible = False
w = ScaleX(Me.Image1.Picture.Width, vbHimetric, vbPixels)
h = ScaleY(Me.Image1.Picture.Height, vbHimetric, vbPixels)
For i = 0 To Me.ScaleWidth / w + 1
For j = 0 To Me.ScaleHeight / h + 1
Me.PaintPicture Me.Image1.Picture, i * w, j * h
Next
Next
End Sub
由于没有看清楚问题,后来才知道这个朋友是想让背景图片铺满整个MDIForm窗口,而MDIForm与Form有一些区别,上述代码根本实现不了,于是便重新写了以下代码:
Private Sub MDIForm_Load()
Set picBackground = Me.Controls.Add("VB.PictureBox", "picBackground")
picBackground.Appearance = 0
picBackground.BorderStyle = 0
picBackground.Align = 0
picBackground.ScaleMode = vbPixels
picBackground.AutoRedraw = False
Set picBackground.Picture = LoadPicture("g:/me.jpg")
picBackground.Visible = True
End Sub
Private Sub MDIForm_Resize()
picBackground.Move 0, 0, Me.Width, Me.Height
End Sub
Private Sub MDIForm_Unload(Cancel As Integer)
Me.Controls.Remove "picBackground"
End Sub
Private Sub picBackground_Paint()
Dim i As Long, j As Long, w As Long, h As Long
w = picBackground.ScaleX(picBackground.Picture.Width, vbHimetric, vbPixels)
h = picBackground.ScaleY(picBackground.Picture.Height, vbHimetric, vbPixels)
For i = 0 To Me.Width / 15 / w + 1
For j = 0 To Me.Width / 15 / h + 1
picBackground.PaintPicture picBackground.Picture, i * w, j * h
Next
Next
End Sub
这个代码基本上满足了设计要求,由于是为了清楚的表达思路,所以使用了一个动态图片框,在实际使用时,如果MDIForm窗体上还有一些设计时的子控件,比如有工具栏,则不使用动态图片框,而是在设计时直接放置一个PictureBox控件,然后工具栏放置到这个PictureBox控件里,再按代码中PictureBox的属性进行逐一设置,这样就可以既让背景图片铺满窗口,又可以显示工具栏,否则,动态加载的图片框会遮隐住工具栏,造成了顾此失彼。