mfc如何添加截图功能

2025-11-20 19:10:47

1、接下来我们就以MFC截取桌面保存图片实例进行演示,首先,创建VS的MFC工程,如下图所示。

mfc如何添加截图功能

2、创建MFC应用,按下图所示直接选择对话框,勾掉使用unicode,直接点击下一步。

mfc如何添加截图功能

3、按下图MFC进行配置,创建MFC项目完成。

mfc如何添加截图功能

1、在MFC窗体中新增一个button,修改CAPTION为截屏并保存,双击进入button点击方法。

mfc如何添加截图功能

2、参考代码:

CTime tCurTime = CTime::GetCurrentTime();//当前日期时间;

CString strTime;

strTime = tCurTime.Format("%Y%m%d_%H%M%S");//将CTime转成CString;

CFileDialog Dlg(FALSE,NULL,strTime,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"excel文件(*.jpg)");

if(Dlg.DoModal() == IDOK)

{

m_str_save_path = Dlg.GetPathName();

m_str_save_path=m_str_save_path+".jpg";

}

CDC *pDC=GetDesktopWindow()->GetDC();//屏幕DC

int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式

int Width = pDC->GetDeviceCaps(HORZRES);

int Height = pDC->GetDeviceCaps(VERTRES);

CDC memDC;//内存DC

memDC.CreateCompatibleDC(pDC);

CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap

memBitmap.CreateCompatibleBitmap(pDC, Width, Height);

oldmemBitmap = memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC

memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//复制屏幕图像到内存DC

//以下代码保存memDC中的位图到文件

BITMAP bmp;

memBitmap.GetBitmap(&bmp);//获得位图信息

FILE *fp = fopen(m_str_save_path, "w+b");

BITMAPINFOHEADER bih = {0};//位图信息头

bih.biBitCount = bmp.bmBitsPixel;//每个像素字节大小

bih.biCompression = BI_RGB;

bih.biHeight = bmp.bmHeight;//高度

bih.biPlanes = 1;

bih.biSize = sizeof(BITMAPINFOHEADER);

bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//图像数据大小

bih.biWidth = bmp.bmWidth;//宽度

BITMAPFILEHEADER bfh = {0};//位图文件头

bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量

bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件总的大小

bfh.bfType = (WORD)0x4d42;

fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//写入位图文件头

fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//写入位图信息头

byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申请内存保存位图数据

GetDIBits(memDC.m_hDC, (HBITMAP)memBitmap.m_hObject, 0, Height, p,

(LPBITMAPINFO)&bih, DIB_RGB_COLORS);//获取位图数据

fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);//写入位图数据

delete [] p;

fclose(fp);

memDC.SelectObject(oldmemBitmap);

memDC.DeleteDC();

ReleaseDC(pDC);

3、将上面的代码粘贴到button点击事件中,如下图所示。

mfc如何添加截图功能

4、直接编译执行,运行exe程序如下图所示。

mfc如何添加截图功能

5、直接点击【截图并保存】,选择保存文件路径。

mfc如何添加截图功能

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢