19,469
社区成员
发帖
与我相关
我的任务
分享 if(!m_dcMem.m_hDC)
m_dcMem.CreateCompatibleDC(pMemDC);
CDC m_dcMem;
m_dcMem.CreateComptibleDC(pMemDC);
CClientDC dc(this);
CDC *pMemDC = GetDesktopWindow()->GetWindowDC();
CBitmap bmp;
bmp.CreateCompatibleBitmap(pMemDC,1440,900);
if(!m_dcMem.m_hDC)
m_dcMem.CreateCompatibleDC(pMemDC);
m_dcMem.SelectObject(&bmp);
m_dcMem.BitBlt(0,0,1440,900,pMemDC,0,0,SRCCOPY);
dc.BitBlt(0,0,1440,900,&m_dcMem,0,0,SRCCOPY);
BYTE *pBits = NULL;
BITMAPINFO bmi;
BITMAPFILEHEADER bmfh;
::ZeroMemory(&bmi,sizeof(BITMAPINFO));
::ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
//create bitmap file
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 1440;
bmi.bmiHeader.biHeight = 900;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
HBITMAP hBitMap = NULL;
BITMAP bm;
bmp.GetBitmap(&bm);
DWORD dwBytes = bm.bmWidthBytes * bm.bmHeight ;
LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,dwBytes);
HDC hdcMem = ::CreateCompatibleDC(dc.m_hDC);
CBitmap * pOldBitmap = m_dcMem.GetCurrentBitmap();
GetDIBits(m_dcMem,bmp,0,900,lpData,&bmi,DIB_RGB_COLORS);
bmfh.bfType = 0x4D42;
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfSize = bmfh.bfOffBits + (1440 * 900) * 32 / 8;
TCHAR szBMPFileName[128];
int iBMPBytes = 1440 * 900 * 32 / 8;
_tcscpy(szBMPFileName,_T("C:\\screen.bmp"));
CFile file;
if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
{
file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
file.Write(&(bmi.bmiHeader),sizeof(BITMAPINFOHEADER));
file.Write(lpData,dwBytes);
file.Close();
}
GlobalFreePtr(lpData);