用bitblt截图一定要有TForm,并且要Show出來吗?

Triplle 2010-09-16 05:00:49
各位好,
小弟最近遇到个要截图的问题.函数是为了生成一张图片,然后用别人提供的函数转成LED屏用的格式.
转图片格式沒问题,截图也实现了,但每次截图都会闪烁窗体——因为我是用创建窗体,然后在窗体上截图,接着关闭窗口实现的.我想问问有没有更好的方法实现?或者还是这种方法,但不用把窗体现出來?

我实现的用在TTimer上的函数如下


void __fastcall TfrmGenerator::tmrTimer(TObject *Sender)
{
HDC hdc1,hdc2;
TRect rect;

//sgTable是一个TStringGrid控件
rect = sgTable->ClientRect;

//修正位置
rect.right -= 10;
rect.bottom -= 10;

TImage *img;

//定义
img = new TImage(NULL);

img->Picture = NULL;

//改变bmp大小
img->Picture->Bitmap->Width = rect.right - rect.left;
img->Picture->Bitmap->Height = rect.bottom - rect.top;

//要截取的目标
hdc1 = GetDC(GetActiveWindow());
hdc2 = img->Canvas->Handle;

//删掉线
sgTable->GridLineWidth = 0;

//截取
BitBlt(hdc2,0,0,rect.Width(),rect.Height(),hdc1,sgTable->Left + 10,sgTable->Top + 10,SRCCOPY);

//重新添加StringGrid的线
sgTable->GridLineWidth = 1;

//重新实现图片的画线
if(Color != NULL){
RedrawTable(img,rect,sgTable->ColCount - 1,ScreenHeight / RowHeight ,sgTable->ColWidths[1] + 1,sgTable->RowHeights[1] + 1);
}

img->Picture->SaveToFile(FileName);

//清空指针
delete img;

Close();
}
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2010-09-17
  • 打赏
  • 举报
回复
直接用Form2->img1->Canvas就有图
梦回童年001 2010-09-17
  • 打赏
  • 举报
回复
我在做LED显示屏的播放软件。直接用抓屏函数。然后再内存中处理。
xjq2003 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zzbinfo 的回复:]
刚才给你做了个测试,就是说这个窗体不显示出来,就是hide的,在内存中也是一样可以截图的,但是你上面的代码就要改一下了

C/C++ code
hdc1 = Form2->img1->Canvas->Handle ; //GetDC(GetActiveWindow());
不能用GetActiveWindow这个了。我是用的图片测试的,你就直接用数据表所在窗体的句柄就可以了
[/Quote]
正解,
我也搞过显示屏的程序
Triplle 2010-09-17
  • 打赏
  • 举报
回复
谢谢各位,今晚回头试一下,先结帐再说
zzbinfo 2010-09-16
  • 打赏
  • 举报
回复
刚才给你做了个测试,就是说这个窗体不显示出来,就是hide的,在内存中也是一样可以截图的,但是你上面的代码就要改一下了
 hdc1 = Form2->img1->Canvas->Handle ;   //GetDC(GetActiveWindow());
不能用GetActiveWindow这个了。我是用的图片测试的,你就直接用数据表所在窗体的句柄就可以了
zzbinfo 2010-09-16
  • 打赏
  • 举报
回复
看你的代码你是要截取的一个数据表的内容然后转换成图片的。不知道你是要的什么效果,我以前接触的led屏都是可以直接截屏的,就是说你要想在电子屏上显示这个数据表的话只要调好坐标让电子屏的软件正好截取到就可以了,如果这么不行,你可以试试让你的数据表打印输出到文件,然后再想办法处理这个文件就不会有你说的这个情况了

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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