设计时我在picturebox里面放了几个控件,有line,也有自己做的ActiveX
我想在运行时把picturebox及里面的控件作为一整体一起保存为某个bmp
但是用savepicture方法只能保存picturebox自己和运行时用line等绘图方法画的东东
而没有保存设计时放在里面的控件
请问怎样才能把设计时放在图片框里的控件和图片框一起保存?

解决方案 »

  1.   

    增加一个PictureBox,使用BitBlt把要保存图片的那个PictureBox上面显示的内容复制下来,再保存。增加一个PicTemp,AutoRedraw设为TrueBitBlt picTemp.hDC, 0, 0, Picture1.Width, Picture1.Height, Picture1.hDC, 0, 0, SRCCOPY
    SavePicture picTemp.Image, "d:\test.bmp"  '注意是Image,不是PictureWin2000+VB6调试通过如果不希望在程序运行中看到PicTemp,可以将其Visible设为False
      

  2.   

    抱歉,请问BitBlt是那里的,怎样才能在程序中使用啊?
      

  3.   

    API啊Private Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC 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 dwRop As Long) As LongPrivate Const SRCCOPY = &HCC0020 加入以上声明就可以用了
      

  4.   

    谢谢wasprui,但我试了一下这跟savepicture的效果是一样的啊
    只是保存了picturebox和运行时用line等绘图方法画的东西
    没有保存设计时放在图片框里的控件的外观呀
      

  5.   

    终于让我找到了,呵呵,以前有人问过了,不好意思,给大家添麻烦了
    我copy一下,这么好的帖子居然没得分,真没天理回复人: thinkeasy(Nothing) ( ) 信誉:100  2002-5-27 17:08:11  得分:0 
    那就要使用抓图的方法
    下面代码把Picture1的内容复制到Picture2中
    GetDC和BitBlt为API函数
    声明可使用API浏览器
    Dim hDC As Long
    hDC = GetDC(Picture1.hwnd)
    sx = Picture1.Width \ Screen.TwipsPerPixelX
    sy = Picture1.Height \ Screen.TwipsPerPixelY
    BitBlt Picture2.hDC, 0, 0, sx, sy, hDC, 0, 0, vbSrcCopy
    保存图片用SavePicture就行了

    SavePicture picture2.Image ,"d:\1.bmp"