VC++截图编程:如何能完整地截图?要求是能够截取层级窗口的方法。 30
现在流行一种用全局DC的截图方法:CDC*pDc=this->GetDC();hscreendc=::GetDC(0);hmemdc=CreateCompatibleDC...
现在流行一种用全局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分! 展开
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分! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询