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

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"
请问各位怎么解决呀,还有没有什么更好的方法呀?
...全文
152 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
  • 打赏
  • 举报
回复
帮顶~
期待高手来讲讲如何把不可见区域的图片也保存出来。
内容概要:本文围绕基于PI双闭环解耦控制的三相电压型PWM整流器在第四象限运行的仿真研究展开,重点分析其在电流反向流动工况下的控制性能。通过Simulink搭建系统模型,采用电压外环与电流内环构成的双闭环PI控制策略,并引入d-q轴解耦环节以消除交叉耦合影响,实现对整流器在能量回馈状态下的高精度、稳定控制。研究涵盖了系统数学建模、控制器参数设计、解耦算法实现及动态响应仿真验证,充分展示了该控制方法在抑制扰动、提升系统鲁棒性方面的有效性。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事新能源变流器、电能质量治理或工业传动系统开发的工程技术人员;具备自动控制理论基础和Simulink仿真能力者更佳。; 使用场景及目标:①深入掌握三相电压型PWM整流器的工作原理及其在不同运行象限的能量流动特性;②理解并实践PI双闭环控制系统的设计思路与参数整定方法;③学习d-q坐标系下电流解耦控制的实现机制;④熟练运用Simulink进行电力电子系统建模与仿真分析;⑤为实际工程中实现高效能量双向变换提供理论依据与技术参考。; 阅读建议:建议结合Simulink环境同步搭建模型,细致分析各模块的信号流向与控制逻辑,重点关注电流内环的动态跟踪能力和电压外环的稳态调节性能,可通过改变负载突变、电网电压波动等条件进行对比实验,进一步评估系统的抗干扰能力与稳定性表现。

1,488

社区成员

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

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