vb picturebox 截图的问题

smallspirite 2010-02-07 04:05:36
我有一个picturebox ,里边我画了图形,还有控件,还有文字,并且picture比屏幕大,带滚动条的。请问我怎么才能够把这个picture上的所有东西保存或者打印出来???
...全文
231 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallspirite 2010-03-29
  • 打赏
  • 举报
回复
拜谢8楼高人 cbm666 代码非常出色,符合我的要求,非常感谢,高人啊
Tiger_Zhao 2010-03-15
  • 打赏
  • 举报
回复
只要设置了 AutoRedraw 就可以用 Image 进行打印输出
Option Explicit

Private Sub Command1_Click()
Printer.PaintPicture Picture1.Image, 100, 100
Printer.EndDoc
End Sub

Private Sub Form_Load()
Picture1.AutoRedraw = True
Picture1.ScaleMode = vbPixels
Picture1.BackColor = vbWhite
Picture1.ForeColor = vbBlack
Picture1.Print "Hello"
Picture1.Line (0, 0)-(Picture1.ScaleWidth - 1, Picture1.ScaleHeight - 1), , B
End Sub
me4405801 2010-03-15
  • 打赏
  • 举报
回复
8楼很强大!
gukuang78 2010-03-11
  • 打赏
  • 举报
回复
up......................
嗷嗷叫的老马 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yk84 的回复:]
楼主我来帮你拼命顶!
[/Quote]
cbm6666 2010-02-09
  • 打赏
  • 举报
回复
'添加 Picture1 Picture2 Command1
'Picture1装载特大型图片


Option Explicit
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 Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetDC Lib "User32.dll" (ByVal hWnd As Long) As Long
Private Declare Function GetClientRect Lib "User32.dll" (ByVal hWnd As Long, ByRef lpRect As RectAPI) As Long
Private Declare Function SelectObject Lib "GDI32.dll" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function CreateCompatibleDC Lib "GDI32.dll" (ByVal hDC As Long) As Long
Private Declare Function GetWindowRect Lib "User32.dll" (ByVal hWnd As Long, ByRef lpRect As RectAPI) As Long
Private Declare Function CreateCompatibleBitmap Lib "GDI32.dll" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function ReleaseDC Lib "User32.dll" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Private Declare Function DeleteObject Lib "GDI32.dll" (ByVal hObject As Long) As Long
Private Declare Function OpenClipboard Lib "User32.dll" (ByVal hWnd As Long) As Long
Private Declare Function EmptyClipboard Lib "User32.dll" () As Long
Private Declare Function SetClipboardData Lib "User32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function CloseClipboard Lib "User32.dll" () As Long
Private Type RectAPI
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Const WM_PAINT = &HF
Const WM_PRINT = &H317
Const PRF_NONCLIENT = &H2
Const PRF_ERASEBKGND = &H8
Const PRF_CLIENT = &H4& ' Draw the window's client area
Const PRF_CHILDREN = &H10& ' Draw all visible child windows
Const PRF_OWNED = &H20& ' Draw all owned windows
Const CF_BITMAP As Long = 2

Private Sub Form_Load()
Me.AutoRedraw = True
Picture1.AutoRedraw = True
Picture1.AutoSize = True
Picture1.BorderStyle = 0
Picture2.AutoRedraw = True
Picture2.BorderStyle = 0
Picture2.Width = Picture1.Width: Picture2.Height = Picture1.Height
End Sub

Private Sub Command1_Click()
Dim hDCMem&, hBmp&, hOld&, hDC&
Dim Rect As RectAPI
hDCMem = CreateCompatibleDC(0&)
Call GetWindowRect(Picture1.hWnd, Rect)
hDC = GetDC(hWnd)
hBmp = CreateCompatibleBitmap(hDC, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top)
Call ReleaseDC(hWnd, hDC)
hOld = SelectObject(hDCMem, hBmp)
Call SendMessage(Picture1.hWnd, WM_PAINT, hDCMem, 0)
Call SendMessage(Picture1.hWnd, WM_PRINT, hDCMem, ByVal (PRF_CHILDREN Or PRF_CLIENT Or PRF_ERASEBKGND Or PRF_NONCLIENT Or PRF_OWNED))
Call SelectObject(hDCMem, hOld)
Call DeleteObject(hDCMem)
If (OpenClipboard(hWnd)) Then
Call EmptyClipboard
Call SetClipboardData(CF_BITMAP, hBmp)
Call CloseClipboard
End If
Picture2.Picture = Clipboard.GetData()
SavePicture Picture2.Image, "c:\aaa.bmp"
End Sub

贝隆 2010-02-08
  • 打赏
  • 举报
回复
使用BitBlt把图片框的所有内容存入一个新的图片框,这个图片框的AutoSize和AutoRedraw都设为True,然后再对这个图片框操作?

呵呵,思路而已,没有具体操作过。。。
东方之珠 2010-02-08
  • 打赏
  • 举报
回复
保存完后清除图片:用CLS属性
东方之珠 2010-02-08
  • 打赏
  • 举报
回复
其实很简单!不管抓图也好,还是Bitblt也好,都只能捕捉到可见区域。有一个最简单的办法:将要抓的图片放到另外一张PictureBox中,AutoSize和AutoRedraw都设为true,Visble设为false,然后用SavePicture保存为文件。
sandy_zc_1 2010-02-07
  • 打赏
  • 举报
回复
复制:BitBlt,保存:SavePicture,打印:Printer.PaintPicture
SYSSZ 2010-02-07
  • 打赏
  • 举报
回复
用Bitblt应该可以.
孤独剑_LPZ 2010-02-07
  • 打赏
  • 举报
回复
用PrintForm,被遮盖的部分肯定打印不出,我想还需要拖动滑块,代码截屏,再打印截屏图像
SYSSZ 2010-02-07
  • 打赏
  • 举报
回复
试一试:
ME.PrintForm

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧