[MFC编程]屏幕截图

问题一:怎么用VC进行屏幕截图?

答:在VC中进行屏幕截图可以分成几步:

(1) 获得整个屏幕的DC,并创建一个与之兼容的DC。

CDC *pDesktopDC=GetDesktopWindow()->GetDC();
 CDC memDC;
 memDC.CreateCompatibleDC(pDesktopDC);

(2)创建一个与屏幕大小相同的兼容位图。

CRect RectDesktop;
 GetDesktopWindow()->GetClientRect(&RectDesktop);
 CBitmap bmpdesktop;
 bmpdesktop.CreateCompatibleBitmap(pDesktopDC,RectDesktop.Width(),RectDesktop.Height());

(3)把位图显示在客户区。

 CRect rect;
 GetClientRect(&rect);
 CDC *pDC=this->GetDC();
 pDC->StretchBlt(0,0,rect.Width(),rect.Height(),pDesktopDC,0,0,RectDesktop.Width(),RectDesktop.Height(),SRCCOPY);
这样就能完成了简单截图的功能。

猜想:(1)按理来说呢,要想截取某个程序的图像,只要获得该程序的DC,并将之复制一份即可。

           (2)那么如果截取屏幕的某一区域的话,只需将区域范围保存下来,然后对复制的位图进行裁剪即可。

问题二:看下面的截图,大家是不是看着很别扭呢?这是使用上面的程序多次截图造成的。咋一看很吃惊,这不是我想要的结果,但事实确实如此。仔细想想也就能明白了。

【原创】屏幕截图 - lvan - lvan的世界
那么怎么样才能不出现这种结果呢?我想应该是先清空客户区的图像,然后再截图。
也就是在截图开始前添加清空客户区图像的功能。
但是如果仅仅是要将背景图去掉的话,那也可以用背景色去填充整个客户区呀。
CRect rc;
GetClientRect(&rc);
pDC->Rectangle(&rc);
这样确实可以避免出现上面的窗口很多的情况。但是新问题又来了,这样的话每次
截图都会闪屏。看来这个方法是行不通的,不能投机取巧啊!
 
该吃饭了,这个问题以后探讨。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值