请注意下面条件:
我的PictureBox的AutoRedraw属性为True
没有加载图片,PictureBox中用控件绘制了表格,
并且放在一个比它小的PictureBox容器中。
我现在想用PaintPicture将它的图形拷贝到一个Printer设备中。
如何才能拷贝所有图形?我用PaintPicture PictureBox.Image不可以
BitBlt hDC和GetDC(hWnd)也不可以。

解决方案 »

  1.   

    PictureBox中用控件绘制了表格,这是什么意思?难道不是画在PictureBox中的么?
      

  2.   

    是上面有Line和Label和Check等控件是要打印出来,怎么办?
      

  3.   

    你先把这些控件画在PictureBox中,然后用PaintPicture给Printer
      

  4.   

    这个是不行的,直接画的,如果用bitblt超出图片框部就会失效的!
    现在有两种解决方案
    1、建一个与picturebox 兼容的DC,先在内存在画好,再画到picturebox 中去,打印就画到printer对画中去
    2、直接在printer在里面,就是用画picturebox 的函数重新画(这种方法可能会好一点)Privte sub Draw(obj as object ) 
       ' 具体方法
        
    end sub在picture中画就 draw picturebox1
    在printer中画就 drwa printer
      

  5.   

    可以用BitBlt 将图像复制到你一个隐藏的picturebox控件中,再操作那个隐藏的picturebox控件
      

  6.   

    tztz520(午夜逛街) 
    隐藏的?
    现在的问题是,我用hdc或者是getdc(hwnd)都得不到全部的图像,
    我用bitblt复制的时候源dc用什么?
      

  7.   

    bitblt复制的时候使用HDC,或GETDC(HWDC)
      

  8.   

    WallesCai(枯藤老树昏鸦,小桥流水人家.古道西风瘦马.夕阳西下,断)呵呵,当图片框设置成AutoRedraw的时候,
    HDC指向Picture的ReDraw内存区,
    而GetDC(hWnd)指向Picture的绘图区。ReDraw内存区保存了整个Picture的位图信息,
    然而超出Width和Height的Label和Line控件却无法复制,
    我现在想得到整个Picture的图像PaintPicture到Printer。
    用Picture属性它只读取位图信息,
    用Image属性只读取HDC也就是图片框可见部分。
      

  9.   

    如果你的这个表格是用控件搭出来的,那我认为很可能这种做法会失败。
    我以前也写过报表程序,不过那是老老实实用一条条线+文本输出画在上面,再保存为BMP的做法。
    在打印的时候也是使用打印机对象提供的方法如法炮制的。
    我觉得只要控制变量用得好,作出来的东西还是有一定的通用性的。
    而用控件搭的方法我没有试过,唯一的一次就是我偷懒而用PRINTFORM直接将界面输出到打印机去了。呵呵
      

  10.   

    因为PICTURE控件配合LINETO、MOVETOEX、TEXTOUT、BITBLT(或PaintPicture方法)等等几个API已经完全可以画出任何形状的表格了。
    只要将AUTOREDRAW设为TRUE再REFRESH一下,就不会存在缩放或保存方面的问题了。
      

  11.   

    WallesCai(枯藤老树昏鸦,小桥流水人家.古道西风瘦马.夕阳西下,断) 朋友,当AutoReDraw=True的时候Refresh时使用AutoReDraw区域重新绘制绘图区,
    但是,我的问题是如何能得到AutoReDraw区没有得到的边界外控件图形,
    如Label和Line控件绘制的东西。很感谢你的帮助。我已经用Line和Print语句绘制了报表,
    虽然俺不想这样,可是没法子~
      

  12.   

    呵呵,我本来就是想问问怎么可以用控件拼出来,
    可是还是得绘图然后PaintPicture了。