本文实例为大家分享了c++实现全屏截图功能的具体代码,供大家参考,具体内容如下
最近维护的项目,在某些情况下,光有日志还不行,于是添加了截图功能,特定情况下,会自动截的图,辅助分析,从而改进程序。以下是截图实现代码。
空白CDemoDlg:截图(空白) { CWnd * pDesktop=GetDesktopWindow (); 美国疾病控制与预防中心* pdeskdc=pDesktop→GetDC (); 绘图用的矩形类再保险;//获取窗口的大小 pDesktop→GetClientRect(和re); CBitmap bmp; bmp。CreateCompatibleBitmap (pdeskdc re.Width (), re.Height ());//创建一个兼容的内存画板 美国疾病控制与预防中心memorydc; memorydc.CreateCompatibleDC (pdeskdc);//选中画笔 CBitmap * pold=memorydc.SelectObject (, bmp);//绘制图像 memorydc。BitBlt (0, 0, re.Width (), re.Height (), pdeskdc, 0, 0, SRCCOPY);//获取鼠标位置,然后添加鼠标图像 CPoint阿宝; GetCursorPos(和po); HICON hinco=(HICON) GetCursor (); memorydc.DrawIcon (po。x - 10,阿宝。y - 10, hinco);//选中原来的画笔 memorydc.SelectObject (pold); 位图位; bmp.GetBitmap(和一些);//定义图像大小(单位:字节) 双字大?mWidthBytes * bit.bmHeight; [lpdata=https://www.yisu.com/zixun/(你)GlobalAlloc (GPTR、大小);//后面是创建一个bmp文件的必须文件头 BITMAPINFOHEADER pbitinfo; pbitinfo。biBitCount=24; pbitinfo。biClrImportant=0; pbitinfo。biCompression=BI_RGB; pbitinfo。biHeight=bit.bmHeight; pbitinfo。双翼飞机=1; pbitinfo。biSize=sizeof (BITMAPINFOHEADER); pbitinfo。biSizeImage=大小; 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=((词)(“M”& lt; & lt;8)| " B "); bfh。bfSize=大小+ 54; bfh。bfOffBits=54;//写入文件 用文件; 装运箱strFileName (GetAppPathW () .c_str ()); strFileName +=_T(截图\ \ "); CreateDirectory (LPCTSTR strFileName, NULL); CTime t=CTime: GetCurrentTime (); 装运箱tt=t.Format (Y“% - % - % d_ % H % m - % S”); strFileName +=tt; strFileName +=_T (bmp格式); 如果(file.Open ((LPCTSTR) strFileName用:内容|用:modeWrite)) { file.Write(及bfh sizeof (BITMAPFILEHEADER)); file.Write(及pbitinfo sizeof (BITMAPINFOHEADER)); 文件。写(lpdata、大小); file.Close (); } GlobalFree (lpdata); } >之前代码注释详尽,我就不多说啥了,保存为bmp无损文件,体积会有些大,朋友可以转化为png格式保存哦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
c++实现屏幕截图功能