首页 > 编程 > C++ > 正文

C++实现屏幕截图功能

2020-05-23 13:30:34
字体:
来源:转载
供稿:网友

本文实例为大家分享了C++实现全屏截图功能的具体代码,供大家参考,具体内容如下

最近维护的项目,在某些情况下,光有日志还不行,于是添加了截图功能,特定情况下,会自动截图,辅助分析,从而改进程序。以下是截图实现代码。

void CDemoDlg::ScreenShot(void) {  CWnd *pDesktop = GetDesktopWindow();  CDC *pdeskdc = pDesktop->GetDC();  CRect re;  //获取窗口的大小  pDesktop->GetClientRect(&re);  CBitmap bmp;  bmp.CreateCompatibleBitmap(pdeskdc, re.Width(), re.Height());  //创建一个兼容的内存画板  CDC memorydc;  memorydc.CreateCompatibleDC(pdeskdc);  //选中画笔  CBitmap *pold = memorydc.SelectObject(&bmp);  //绘制图像  memorydc.BitBlt(0, 0, re.Width(), re.Height(), pdeskdc, 0, 0, SRCCOPY);  //获取鼠标位置,然后添加鼠标图像  CPoint po;  GetCursorPos(&po);  HICON hinco = (HICON)GetCursor();  memorydc.DrawIcon(po.x - 10, po.y - 10, hinco);  //选中原来的画笔  memorydc.SelectObject(pold);  BITMAP bit;  bmp.GetBitmap(&bit);  //定义 图像大小(单位:byte)  DWORD size = bit.bmWidthBytes * bit.bmHeight;  LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR, size);  //后面是创建一个bmp文件的必须文件头  BITMAPINFOHEADER pbitinfo;  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);  BITMAPFILEHEADER bfh;  bfh.bfReserved1 = bfh.bfReserved2 = 0;  bfh.bfType = ((WORD)('M' << 8) | 'B');  bfh.bfSize = size + 54;  bfh.bfOffBits = 54;  //写入文件  CFile file;  CString strFileName(GetAppPathW().c_str());  strFileName += _T("ScreenShot//");  CreateDirectory((LPCTSTR)strFileName, NULL);  CTime t = CTime::GetCurrentTime();  CString tt = 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格式保存哦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表