C++实现屏幕截图功能
本文实例为大家分享了C++实现全屏截图功能的具体代码,供大家参考,具体内容如下
最近维护的项目,在某些情况下,光有日志还不行,于是添加了截图功能,特定情况下,会自动截图,辅助分析,从而改进程序。以下是截图实现代码。
voidCDemoDlg::ScreenShot(void)
{
CWnd*pDesktop=GetDesktopWindow();
CDC*pdeskdc=pDesktop->GetDC();
CRectre;
//获取窗口的大小
pDesktop->GetClientRect(&re);
CBitmapbmp;
bmp.CreateCompatibleBitmap(pdeskdc,re.Width(),re.Height());
//创建一个兼容的内存画板
CDCmemorydc;
memorydc.CreateCompatibleDC(pdeskdc);
//选中画笔
CBitmap*pold=memorydc.SelectObject(&bmp);
//绘制图像
memorydc.BitBlt(0,0,re.Width(),re.Height(),pdeskdc,0,0,SRCCOPY);
//获取鼠标位置,然后添加鼠标图像
CPointpo;
GetCursorPos(&po);
HICONhinco=(HICON)GetCursor();
memorydc.DrawIcon(po.x-10,po.y-10,hinco);
//选中原来的画笔
memorydc.SelectObject(pold);
BITMAPbit;
bmp.GetBitmap(&bit);
//定义图像大小(单位:byte)
DWORDsize=bit.bmWidthBytes*bit.bmHeight;
LPSTRlpdata=(LPSTR)GlobalAlloc(GPTR,size);
//后面是创建一个bmp文件的必须文件头
BITMAPINFOHEADERpbitinfo;
pbitinfo.biBitCount=24;
pbitinfo.biClrImportant=0;
pbitinfo.biCompression=BI_RGB;
pbitinfo.biHeight=bit.bmHeight;
pbitinfo.biPlanes=1;
pbitinfo.biSize=sizeof(BITMAPINFOHEADER);
pbitinfo.biSizeImage=size;
pbitinfo.biWidth=bit.bmWidth;
pbitinfo.biXPelsPerMeter=0;
pbitinfo.biYPelsPerMeter=0;
GetDIBits(pdeskdc->m_hDC,bmp,0,pbitinfo.biHeight,lpdata,(BITMAPINFO*)
&pbitinfo,DIB_RGB_COLORS);
BITMAPFILEHEADERbfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<<8)|'B');
bfh.bfSize=size+54;
bfh.bfOffBits=54;
//写入文件
CFilefile;
CStringstrFileName(GetAppPathW().c_str());
strFileName+=_T("ScreenShot\\");
CreateDirectory((LPCTSTR)strFileName,NULL);
CTimet=CTime::GetCurrentTime();
CStringtt=t.Format("%Y-%m-%d_%H-%M-%S");
strFileName+=tt;
strFileName+=_T(".bmp");
if(file.Open((LPCTSTR)strFileName,CFile::modeCreate|CFile::modeWrite))
{
file.Write(&bfh,sizeof(BITMAPFILEHEADER));
file.Write(&pbitinfo,sizeof(BITMAPINFOHEADER));
file.Write(lpdata,size);
file.Close();
}
GlobalFree(lpdata);
}
代码注释详尽,我就不多说啥了,保存为bmp无损文件,体积会有些大,朋友可以转化为png格式保存哦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。