请注意下面条件:
我的PictureBox的AutoRedraw属性为True
没有加载图片,PictureBox中用控件绘制了表格,
并且放在一个比它小的PictureBox容器中。
我现在想用PaintPicture将它的图形拷贝到一个Printer设备中。
如何才能拷贝所有图形?我用PaintPicture PictureBox.Image不可以
BitBlt hDC和GetDC(hWnd)也不可以。
我的PictureBox的AutoRedraw属性为True
没有加载图片,PictureBox中用控件绘制了表格,
并且放在一个比它小的PictureBox容器中。
我现在想用PaintPicture将它的图形拷贝到一个Printer设备中。
如何才能拷贝所有图形?我用PaintPicture PictureBox.Image不可以
BitBlt hDC和GetDC(hWnd)也不可以。
现在有两种解决方案
1、建一个与picturebox 兼容的DC,先在内存在画好,再画到picturebox 中去,打印就画到printer对画中去
2、直接在printer在里面,就是用画picturebox 的函数重新画(这种方法可能会好一点)Privte sub Draw(obj as object )
' 具体方法
end sub在picture中画就 draw picturebox1
在printer中画就 drwa printer
隐藏的?
现在的问题是,我用hdc或者是getdc(hwnd)都得不到全部的图像,
我用bitblt复制的时候源dc用什么?
HDC指向Picture的ReDraw内存区,
而GetDC(hWnd)指向Picture的绘图区。ReDraw内存区保存了整个Picture的位图信息,
然而超出Width和Height的Label和Line控件却无法复制,
我现在想得到整个Picture的图像PaintPicture到Printer。
用Picture属性它只读取位图信息,
用Image属性只读取HDC也就是图片框可见部分。
我以前也写过报表程序,不过那是老老实实用一条条线+文本输出画在上面,再保存为BMP的做法。
在打印的时候也是使用打印机对象提供的方法如法炮制的。
我觉得只要控制变量用得好,作出来的东西还是有一定的通用性的。
而用控件搭的方法我没有试过,唯一的一次就是我偷懒而用PRINTFORM直接将界面输出到打印机去了。呵呵
只要将AUTOREDRAW设为TRUE再REFRESH一下,就不会存在缩放或保存方面的问题了。
但是,我的问题是如何能得到AutoReDraw区没有得到的边界外控件图形,
如Label和Line控件绘制的东西。很感谢你的帮助。我已经用Line和Print语句绘制了报表,
虽然俺不想这样,可是没法子~
可是还是得绘图然后PaintPicture了。