保存对话框的截图错位了,不知道哪里错了,向大虾求教正常
错位
代码如下:
void CTestDlg::savePic(CString picName)
{
CDC dc; 
dc.CreateDC((LPCTSTR)"DISPLAY",NULL,NULL,NULL); CDC memDC ;
CBitmap memBitmap ;
CBitmap* oldBitmap ;  CRect rect;
GetWindowRect(&rect);
//ScreenToClient(&rect);
int m_nClientWidth = rect.Width();//
int m_nClientHeight = rect.Height();// memDC.CreateCompatibleDC(&dc) ;
memBitmap.CreateCompatibleBitmap(&dc, m_nClientWidth, m_nClientHeight) ;
oldBitmap = (CBitmap *)memDC.SelectObject(&memBitmap) ; if (memDC.GetSafeHdc() != NULL)
{
memDC.BitBlt(0, 0, m_nClientWidth, m_nClientHeight,&dc, rect.left, rect.top, SRCCOPY); memDC.SelectObject(oldBitmap);
} BITMAP btm;  //获取bmp文件信息
memBitmap.GetBitmap(&btm);  //分配内存
DWORD size=btm.bmWidthBytes*btm.bmHeight; 
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size); 
if(lpData != NULL) 

//填充bmp头文件信息
BITMAPINFOHEADER bih; 
bih.biBitCount=btm.bmBitsPixel; 
bih.biClrImportant=0; 
bih.biClrUsed=0; 
bih.biCompression=0; 
bih.biHeight=btm.bmHeight; 
bih.biPlanes=1; 
bih.biSize=sizeof(BITMAPINFOHEADER); 
bih.biSizeImage=size; 
bih.biWidth=btm.bmWidth; 
bih.biXPelsPerMeter=0; 
bih.biYPelsPerMeter=0; 
GetDIBits(dc.m_hDC,memBitmap,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); //从bm中获取bmp数据 BITMAPFILEHEADER bfh; //bmp文件头定义
bfh.bfReserved1=bfh.bfReserved2=0; 
bfh.bfType=((WORD)('M'<<8)|'B'); 
bfh.bfSize=sizeof(bfh)+size; 
bfh.bfOffBits=sizeof(bfh);  CFile bf; 
if(bf.Open(picName,CFile::modeCreate|CFile::modeWrite)) 

bf.Write(&bfh,sizeof(BITMAPFILEHEADER)); 
bf.Write(&bih,sizeof(BITMAPINFOHEADER)); 
bf.Write(lpData,size); 
bf.Close(); 

::GlobalFree(lpData); 

dc.DeleteDC(); 
}