如何用MFC编写一个程序,获得整个屏幕的截图并保存为bmp格式?

本人mfc学得很差,几乎零基础,求解释得详细一点~~

第1个回答  推荐于2016-02-23
代码 大概就是这样 有几个关键函数仔细一下,要是要完整代码呢留言
CDC memDC;
CBitmap memBitmap,*pOldBitmap;
CWindowDC dc(GetDesktopWindow());
memDC.CreateCompatibleDC(&dc);
int nWidth,nHeight;
/* nWidth=GetSystemMetrics(SM_CXSCREEN);
nHeight=GetSystemMetrics(SM_CYSCREEN);*/
CRect rect;
GetDesktopWindow()->GetWindowRect(rect);
ClientToScreen(&rect);
nWidth=rect.Width();
nHeight=rect.Height();
memBitmap.CreateCompatibleBitmap(&dc,nWidth,nHeight);
pOldBitmap=memDC.SelectObject(&memBitmap);
// memDC.StretchBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,rect.Width(),rect.Height(),SRCCOPY);
memDC.BitBlt(0,0,nWidth,nHeight,&dc,0,0,SRCCOPY);

BITMAPFILEHEADER BMFhead;
BITMAPINFOHEADER BMIhead;
BMFhead.bfReserved1=0;
BMFhead.bfReserved2=0;
BMFhead.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
BMFhead.bfSize=BMFhead.bfOffBits+nWidth*nHeight*4;
BMFhead.bfType=0x4d42;

BMIhead.biBitCount=32;
BMIhead.biClrImportant=0;
BMIhead.biClrUsed=0;
BMIhead.biSizeImage=0;
BMIhead.biXPelsPerMeter=0;
BMIhead.biYPelsPerMeter=0;
BMIhead.biCompression=BI_RGB;
BMIhead.biHeight=nHeight;
BMIhead.biPlanes=1;
BMIhead.biSize=sizeof(BITMAPINFOHEADER);
BMIhead.biWidth=nWidth;

DWORD dwSize=nWidth*nHeight*4;
BYTE *pData=new BYTE[dwSize];
GetDIBits(memDC.m_hDC,(HBITMAP)memBitmap.m_hObject,0,nHeight,pData,(LPBITMAPINFO)&BMIhead,DIB_RGB_COLORS);

CFile file;
file.Open("test.bmp",CFile::modeCreate | CFile::modeWrite);
file.Write(&BMFhead,sizeof(BITMAPFILEHEADER));
file.Write(&BMIhead,sizeof(BITMAPINFOHEADER));
file.Write(pData,dwSize);
file.Close();
memDC.SelectObject(pOldBitmap);
MessageBox("绘图完毕");
GetParent()->ShowWindow(SW_SHOW);本回答被提问者和网友采纳
第2个回答  2013-01-24
给你代码,发哪里
第3个回答  2013-01-15
http://blog.csdn.net/zwmei/article/details/7440579
此文做了比较详细的解释,可以参考

如何用MFC编写一个程序,获得整个屏幕的截图并保存为bmp格式?
file.Open("test.bmp",CFile::modeCreate | CFile::modeWrite);file.Write(&BMFhead,sizeof(BITMAPFILEHEADER));file.Write(&BMIhead,sizeof(BITMAPINFOHEADER));file.Write(pData,dwSize);file.Close();memDC.SelectObject(pOldBitmap);MessageBox("绘图完毕");GetParent()->ShowWindow(SW_SHOW);...

在mfc编程中,如何编程保存视图区为BMP格式的图像
把srcDC换成你要保存的窗口的DC就行:HBITMAP CopyScreenToBitmap(LPRECT lpRect){ int m_xScreen = GetSystemMetrics(SM_CXSCREEN);\/\/获取y方向屏幕像素()int m_yScreen = GetSystemMetrics(SM_CYSCREEN);HDC hScrDC,hMemDC;HBITMAP hBitmap,hOldBitmap;int nX1,nX2,nY1,nY2;int nWidth,nHeig...

MFC单文档绘图,点击文件->保存,怎样可以保存为bmp格式
{ \/\/ TODO: 在此添加命令处理程序代码 CImage bmp;CFileDialog saveDlg(TRUE, _T(".bmp"), _T(""), 6UL, _T("位图(*.bmp)"));saveDlg.DoModal();bmp.Save(saveDlg.GetPathName());} 可以试试这个

vc++6.0MFC画图如何保存为bmp格式
VC6++不方便, 高于VC6版本可以用CImage, 很方便

关于MFC的问题,做一个基于对话框的MFC程序,从内存读取BMP图像并显示...
在CDanamicLoadView::OnMouseMove中将加载的动态图片画到另一个虚拟DC中,将虚拟DC完全复制到兼容DC中。OnEraseBkgnd(是一个背景重画的消息WM_ERASEBKGND,返回TRUE不重画背景)CDanamicLoadView::OnDraw中将兼容DC中复制到pDC中。希望你通过看我的例子能真正学到东西,这是vs2012的工程可能你没办法直接...

mfc单文档绘图问题,怎么保存成bmp格式
绘图可以使用双缓冲,保存时使用GDI+把内存DC的内容保存为BMP格式即可,GDI+处理支持保存为多种格式的图像文件。

怎样在MFC中读取一幅图片并显示在对话框里面
对话框类加一个存图像路径的变量 用来选择和打开图像 处理图像的部分写在“开始”按键的响应函数里 关于显示:你一个MFC对话框程序想显示图像在那啊?如果只要直接画上去的话就重载OnPaint写代码

MFC中如何载入bmp和jpeg格式的图片,并作为文件背景
PSP是一台索尼推出的掌机,它可以通过安装模拟器来运行以上游戏。

vc++在基于对话框的MFC中如何打开一个bmp图像,并将其值存储起来_百度知 ...
你先拖一个图片控件 然后image 那里联系你的bmp图片 但是储存 最好是存储路径

MFC关于全屏截图,并进行全屏显示
我给你提供一个思路吧,具体代码就你自己写了。假设二维数组名字为a,即(*a)++就是在一行中向右移动,(*a)--就是在一行中向左移动,a++就是在一列中向下移动,a--就是向上移动。然后用一些循环语句将移动过程中经过的元素加起来就是外围元素的和了。

相似回答