ListView背景图如何随ListView本身大小变化而自动缩放?

解决方案 »

  1.   

    先调用getdc获得listview的DC,然后调用listview.picture.Render(注意变量的类型),最后 ReleaseDC
      

  2.   

    先谢谢 rainstormmaster(暴风雨 v2.0) !现在我先利用 Image控件加载图片,由于Image控件可以很容易的设置图片随控件大小自动缩放。
    然后将listview的背景图片设置为Image控件的图片。代码如下:
    Private Sub Form_Resize()
        With Me.ListView1
        
            .Move Me.ScaleLeft, Me.ScaleTop, Me.ScaleWidth, Me.ScaleHeight
            
            Image1.Move Me.ScaleLeft, Me.ScaleTop, Me.ScaleWidth, Me.ScaleHeight
            
            Dim lRet As Long
            lRet = GetDC(.hwnd)
            .Picture.Render lRet, 0, 0, .Width, .Height, Image1.Left, Image1.Top, Image1.Width, Image1.Height, 0&
            .Refresh
            ReleaseDC .hwnd, lRet
        End With
    End Sub
    但现在执行到 render语句 时报错(无效的过程调用或参数),还请您看看问题出在哪里?
      

  3.   

    试了一下,问题出在lRet = GetDC(.hwnd)获得的dc和Render方法有冲突,这样吧:
    用CreateCompatibleDC、 StretchBlt、OleCreatePictureIndirect直接从一个stdpicture对象得到另外一个指定了大小的stdpicture对象参考:http://www.mvps.org/EDais/Code/Libraries/Graphics/modOLEPicture.bashttp://72.14.203.104/search?q=cache:7qmN_8lXoJ8J:www.eggheadcafe.com/ng/microsoft.public.vb.winapi.networks/post12159642.asp+stdpicture+Render+vb+listview&hl=zh-CN
      

  4.   

    换一个思路就可以了:
    一个form,一个listviw,一个picture,picture装载一张图片用来演示
    粘贴下面的代码,改变form的大小看效果Option ExplicitPrivate Sub Form_Load()
        Picture1.AutoRedraw = True
        Picture1.Visible = FalseEnd SubPrivate Sub Form_Resize()
        ListView1.Top = 0
        ListView1.Left = 0
        ListView1.Width = Me.Width
        ListView1.Height = Me.Height
        
        Picture1.Width = Me.Width
        Picture1.Height = Me.Height
        Picture1.PaintPicture Picture1.Picture, 0, 0, Me.Width, Me.Height
        Set ListView1.Picture = Nothing
        Set ListView1.Picture = Picture1.Image
    End Sub