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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。