永发信息网

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

答案:3  悬赏:0  手机版
解决时间 2021-04-07 20:28
  • 提问者网友:杀生予夺
  • 2021-04-07 08:36
如何用MFC编写一个程序,获得整个屏幕的截图并保存为bmp格式?
最佳答案
  • 五星知识达人网友:野慌
  • 2021-04-07 09:30
代码 大概就是这样 有几个关键函数仔细一下,要是要完整代码呢留言
CDC memDC;
CBitmap memBitmap,*pOldBitmap;
CWindowDC dc(GetDesktopWindow());
memDC.CreateCompatibleDC(&dc);
int nWidth,nHeight;

CRect rect;
GetDesktopWindow()->GetWindowRect(rect);
ClientToScreen(&rect);
nWidth=rect.Width();
nHeight=rect.Height();
memBitmap.CreateCompatibleBitmap(&dc,nWidth,nHeight);
pOldBitsrc=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);
全部回答
  • 1楼网友:酒安江南
  • 2021-04-07 10:49
给你代码,发哪里
  • 2楼网友:孤独入客枕
  • 2021-04-07 10:04
http://blog.csdn.net/zwmei/article/details/7440579
此文做了比较详细的解释,可以参考
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯