我先在主窗体上放了一个picturebox,在picturebox里放了一个image,设好image的图片,然后主窗体Resize事件里代码如下:
Private Sub MDIForm_Resize()
    Picture1.Visible = False
    Picture1.Height = Me.ScaleHeight + 60
    Image1.Width = Me.ScaleWidth
    Image1.Height = Me.ScaleHeight + 60
    Picture1.Visible = True
End Sub这样可以实现上述我要实现的功能,但是问题来了,这样做之后,就无法打开子窗口了,
多次尝试之后发现,子窗体是显示在picturebox之外的区域,而不能显示在picturebox之上,怎么才能让picturebox作为背景呢?

解决方案 »

  1.   

    图片用矢量图格式,设为窗体picture属性就行了  :)
      

  2.   

    加入一个MDI窗体frmMDI
    在窗体中放入一个pictureBox(picture1)
    代码如下:
    Option Explicit    Private p As PicturePrivate Sub MDIForm_Load()
        '0.jpg是你想放在界面的图片
        Set p = LoadPicture(App.Path & "\0.jpg")
    End SubPrivate Sub MDIForm_Resize()
        Picture1.Top = 0
        Picture1.Height = frmMDI.Height
        Picture1.PaintPicture p, 0, 0, Picture1.Width, Picture1.Height
    End Sub
      

  3.   

    'pic 为图片框,有一幅图片,令
    ' pic.AutoRedraw = True
    ' pic.AutoRedraw = True
    '不过子窗体会把背景搞坏,仅提供参考
    Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypeConst Srccopy = &HCC0020
    Private Sub MDIForm_Activate()
     Call MDIForm_Resize
     
    End SubPrivate Sub MDIForm_Resize()
       Dim hwnds As Long
       Dim re1 As RECT
       Dim re2 As RECT
       hwnds = FindWindowEx(MDIForm1.hwnd, 0, "MDIClient", vbNullString)
       GetWindowRect hwnds, re1
       GetWindowRect pic.hwnd, re2
       StretchBlt GetDC(hwnds), 0, 0, re1.Right - re1.Left, re1.Bottom - re1.Top, pic.hdc, 0, 0, re2.Right - re2.Left, re2.Bottom - re2.Top, Srccopy
    End Sub
      

  4.   

    注:Pic 为隐含pic.Visible =False
      

  5.   

    xayzmb(行者) :
    怎么运行到Set p = LoadPicture(App.Path & "\0.jpg")
    时说类型不匹配啊!注:我已换成我自己的路径了
      

  6.   

    在主窗体中加一个子窗体,此窗体用来放图片,且其windowstate=2 。当要加载其他子窗体时,把放图片的子窗体unload,当其他子窗体unload后,再把放图片的子窗体load
      

  7.   

    我的做法:
    //主窗体
    Private Sub MDIForm_Load()
      Me.WindowState = vbMaximized  Frm_bg.Show
      Frm_bg.ZOrder (0)
    End SubPrivate Sub MDIForm_Resize()
      If Me.WindowState <> vbMinimized Then
        Frm_bg.Height = Me.Height - 1450 //这是因为我上面有菜单和TOOLBAR
        Frm_bg.Width = Me.Width - 150
      End If
    End Sub//子窗体
    BorderStyle=0Private Sub Form_Load()
    On Error GoTo NewPic
        Img_bg.Picture = LoadPicture("youpic.jpg")
      Exit SubNewPic:
      If (Err.Number = 53) Or (Err.Number = 76) Then
        Img_bg.Picture = LoadPicture(App.Path + "\default.jpg")
        Resume Next
      End If
    End SubPrivate Sub Form_Resize()
      Img_bg.Width = Me.Width
      Img_bg.Height = Me.Height
    End Sub
      

  8.   

    yefm(百聊) :我用了你的方法,不过不能把frmBack(放背景图的子窗口) 的windowstate设为2,这样就会根本看不到frmBack,只能为0(normal),加载其他子窗口的时候也无须unload frmBack,让它一直放着就是了,只要把标题栏去掉就是,就跟放一张图片一模一样!唯一美中不中的是resize的时候,过程不是那么平滑,图片有抖动的感觉
      

  9.   

    试一下我的方法,在我这里没有发现抖动或者其他现象。windowstate=2就是窗口最大化呀,怎么会看不到呢?奇怪。
      

  10.   

    qiangsheng(立足中原辐射西北) :我的方法跟你的是一样的道理,而且我也用你的试了,一样的效果,我的代码如下:
    Private Sub MDIForm_Load()
        frmZBack.Show
        frmZBack.ZOrder (0)
    End SubPrivate Sub MDIForm_Resize()
        '让背景图随着主窗口改变大小
        With frmZBack
            .Width = Me.ScaleWidth
            .Height = Me.ScaleHeight
            .Image1.Width = .Width
            .Image1.Height = .ScaleHeight
        End With
        
    End Sub
      

  11.   

    如果是这样的话,我们使用IMAGE或者PICTURE是没办法解决这个问题的,只有自己写其它的显示方法。
      

  12.   


    我有一个很漂亮的例程,请把Email通过短消息给我,我发给你
      

  13.   

    to: jonason6(我怕病毒) 
    有没有这句:
    Private p As Picture
    这几行代码我都运行过了的
    没有问题呀.
      

  14.   

    方法1:当打开子窗体时,将图片框的visible设为false, 关闭时设为true:
    方法2:将图片放在一个子窗体中,让此子窗体做为主窗体背景。
      

  15.   

    收到 cnwd() 的一个例子,不敢独享,现供大家参考:
    先在主窗体放一个picture1,再在picture1里放一个image1,指定image1的图片,
    Private Sub MDIForm_Load()
        Picture1.AutoRedraw = True
        Picture1.Align = 1
        Picture1.BorderStyle = 0
    End Sub
    Private Sub MDIForm_Resize()
        '让背景图随着主窗口改变大小
        If Me.WindowState = vbMinimized Then
            Exit Sub
        End If    Picture1.Height = Me.Height - 30 * Screen.TwipsPerPixelY
        Picture1.Visible = True
        Picture1.PaintPicture Image1.Picture, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0, 0
        Me.Picture = Picture1.Image
        Picture1.Visible = FalseEnd Sub
      

  16.   

    万圣科技
    急招vb程序员,熟练vb编程及数据库
    [email protected] 
    www.widersun.com
    待遇优,上海工作