将窗体(窗体高度很大,有不可见区域)转换为位图

shockcqyc 2009-06-15 11:58:02
将打印的窗体保存下来,里面包含数据(有表格)和图片,打印的窗体高度很大,有不可见区域。用API函数GetWindowDC和BitBlt却只能将可见区域的内容保存为图片。
dc = GetWindowDC(Me.hwnd)
Call BitBlt(Picture1.hDC, x, y, Me.Width, Me.Height, dc, 0, 0, SRCCOPY)
SavePicture Picture1.Image, "D:\1.bmp"
请问各位怎么解决呀,还有没有什么更好的方法呀?
...全文
153 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shockcqyc 2009-07-10
  • 打赏
  • 举报
回复
枉我还搞50分,唉
Radar2006 2009-07-08
  • 打赏
  • 举报
回复
bm := TBitMap.Create;
n := bm.Canvas.TextWidth(Msg) + led.LEDWidth - 2; //显示后一条后加空白行
bm.Width := n;
bm.Height := 24;
bm.Canvas.Brush.Color := clBlack;
bm.Canvas.Font.Size := 12;
bm.Canvas.FillRect(bm.Canvas.ClipRect);
bm.Canvas.Font.Color := clWhite;
bm.Canvas.TextOut(0, 0, Msg);
bm.SaveToFile(str0 + '\a.bmp');
bm.Free;
Radar2006 2009-07-08
  • 打赏
  • 举报
回复
[delphi(6行)转VB]如何使用VB动态生成文字图片
http://topic.csdn.net/u/20090708/20/0707d48e-a89b-4fa5-a40a-b9bf5a43607d.html

lz要问的问题和我差不多.用delphi能实现
不知用vb怎样做
zjl1234567 2009-06-20
  • 打赏
  • 举报
回复
autoredraw 设置成true就行了
贝隆 2009-06-20
  • 打赏
  • 举报
回复
用kb_event模拟拷屏,再将剪切板中的图片用stream存储
xbin_2009 2009-06-20
  • 打赏
  • 举报
回复
用 PrintWindow 和 SetWindowPos 这两个API函数试试。

Private Declare Function PrintWindow Lib "user32" (ByVal SrcHwnd As Long, ByVal DesHDC As Long, ByVal uFlag As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOMOVE = &H2
Private Sub Command1_Click()
SetWindowPos Picture1.hwnd, 0, 0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, SWP_NOMOVE
Call PrintWindow(Me.hwnd, Picture1.hDC, 0)
Picture1.Refresh
SavePicture Picture1.Image, App.Path & "\pic001.bmp"
End Sub
shockcqyc 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 silencenet 的回复:]
都说了用PrintWindow.. 怎么还没搞定
VB codeOptionExplicitPrivate DeclareFunction PrintWindow Lib"user32" (ByVal SrcHwndAsLong, ByVal DesHDCAsLong, ByVal uFlagAsLong)AsLongPrivateSub Command1_Click()
Picture1.Width= Me.Width: Picture1.Height= Me.HeightCall PrintWindow(Me.hWnd, Picture1.hDC,0)
Picture1.Refresh
SavePicture Picture1.Image,"C:\SilenceNet.Bmp"End SubPrivateSub Form_Load()
Me.Left=-1000'呐!把窗口移到屏幕外面去了啊
Picture1.Visible=False
Picture1.AutoRedraw=True
Picture1.BorderStyle=0
Picture1.Appearance=0End Sub

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/SilenceNet/archive/2009/06/18/4278065.aspx

[/Quote]

窗体很高,屏幕显示不完,有不可见区域,而且还是子窗体,如果是子窗体的话截下来的下半部分是黑色的;如果非子窗体,只能截一部分,最下面的部分全是空白。
东方之珠 2009-06-18
  • 打赏
  • 举报
回复
按照窗体的实际座标抓图即可。
clear_zero 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 silencenet 的回复:]
都说了用PrintWindow.. 怎么还没搞定
VB codeOptionExplicitPrivate DeclareFunction PrintWindow Lib"user32" (ByVal SrcHwndAsLong, ByVal DesHDCAsLong, ByVal uFlagAsLong)AsLongPrivateSub Command1_Click()
Picture1.Width= Me.Width: Picture1.Height= Me.HeightCall PrintWindow(Me.hWnd, Picture1.hDC,0)
Picture1.Refresh
SavePicture Picture1.Image,"C:\SilenceNet.Bmp"End SubPrivateSub Form_Load()
Me.Left=-1000'呐!把窗口移到屏幕外面去了啊
Picture1.Visible=False
Picture1.AutoRedraw=True
Picture1.BorderStyle=0
Picture1.Appearance=0End Sub

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/SilenceNet/archive/2009/06/18/4278065.aspx

[/Quote]

标记
silencenet 2009-06-18
  • 打赏
  • 举报
回复
都说了用PrintWindow.. 怎么还没搞定

Option Explicit
Private Declare Function PrintWindow Lib "user32" (ByVal SrcHwnd As Long, ByVal DesHDC As Long, ByVal uFlag As Long) As Long

Private Sub Command1_Click()
Picture1.Width = Me.Width: Picture1.Height = Me.Height
Call PrintWindow(Me.hWnd, Picture1.hDC, 0)
Picture1.Refresh
SavePicture Picture1.Image, "C:\SilenceNet.Bmp"
End Sub

Private Sub Form_Load()
Me.Left = -1000 '呐!把窗口移到屏幕外面去了啊

Picture1.Visible = False
Picture1.AutoRedraw = True
Picture1.BorderStyle = 0
Picture1.Appearance = 0
End Sub

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/SilenceNet/archive/2009/06/18/4278065.aspx

lyserver 2009-06-17
  • 打赏
  • 举报
回复
问题的关键是表格这类非Windows标准控件不好处理。如果只是标准控件,则可以查找子控件后在内存DC里重绘控件就行了。
shockcqyc 2009-06-16
  • 打赏
  • 举报
回复
API栏里没有人解决吗?
njstalk 2009-06-15
  • 打赏
  • 举报
回复
帮顶~
期待高手来讲讲如何把不可见区域的图片也保存出来。

1,488

社区成员

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

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