VC++截图编程:如何能完整地截图?要求是能够截取层级窗口的方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC++截图编程:如何能完整地截图?要求是能够截取层级窗口的方法。相关的知识,希望对你有一定的参考价值。

现在流行一种用全局DC的截图方法:

CDC *pDc=this->GetDC();
hscreendc=::GetDC(0);
hmemdc=CreateCompatibleDC(hscreendc);
hbitmap=CreateCompatibleBitmap(hscreendc,BMCX,BMCY);
SelectObject(hmemdc,hbitmap);
BitBlt(hmemdc,0,0,BMCX,BMCY,hscreendc,0,0,SRCCOPY);//将屏幕内容保存至内存DC
::ReleaseDC(NULL,hscreendc); hscreendc=NULL;
dwRtn= GetBitmapBits(hbitmap,dwOriginBufLen,(LPVOID)pBufOrigin);//将图像的像素信息读取进内存

这种用全局DC方法固然能截图,但是对于层级窗体(调用过 SetLayeredWindowAttributes 的窗体,窗体能具有半透明效果)却不起作用,而PrintScreen 键则可以截取到层级窗体。说明全局DC截图法与 printScreen 键的截图功能是不同的,现在想问问怎样才能做到类似PrintScreen 键的截图功能,即最正规的截图方法。
注意:不能模拟按printScreen键改动剪贴板。
完全解决疑问可追加30分!

参考技术A BitBlt 的最后一个参数,通常我们用SRCCOPY,对吧?
改成 SRCCOPY | CAPTUREBLT
原因和细节请参看MSDN

以上是关于VC++截图编程:如何能完整地截图?要求是能够截取层级窗口的方法。的主要内容,如果未能解决你的问题,请参考以下文章

如何截取完整滚动文件的屏幕截图

如何截取完整桌面Windows c#的屏幕截图[关闭]

如何更快地截取 UIView 截图?

如何截取某一窗口内的图像 VC

如何以编程方式截取可扩展的uitableview的屏幕截图

如何在 Android 上以编程方式截取屏幕截图? [复制]