-

- 加为好友
- 发送私信
- 在线聊天
-
isjava
- 等级:

- 可用分等级:
- 总技术分:
- 总技术分排名:
- 结帖率:
|
| 发表于:2008-08-20 16:58:36 楼主 |
void CField2View::OnClientSave(char filename[50]) { // TODO: Add your command handler code here BITMAPINFO bi;//信息头 void *pBits=NULL; CRect rect;//客户区窗口 GetClientRect(&rect); int nWidth=rect.right; int nHeight=rect.bottom; ZeroMemory(&bi,sizeof(bi)); bi.bmiHeader.biSize=sizeof(bi.bmiHeader); bi.bmiHeader.biHeight=nHeight; bi.bmiHeader.biWidth=nWidth; bi.bmiHeader.biPlanes=1; bi.bmiHeader.biBitCount=24; bi.bmiHeader.biCompression=BI_RGB; bi.bmiHeader.biSizeImage=3*nWidth*nHeight; //****************************************************** nHeight=N; //我需要的图是一个N×N个格子的图 nWidth=N; //****************************************************** //拷贝客户区至内存DC HDC hActiveDC=::GetDC(this->m_hWnd); HDC hActiveWndCompatibleDC=CreateCompatibleDC(hActiveDC); //HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,rect.right,rect.bottom); HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,nWidth+4,nHeight+4);//取比窗口高些尺寸以消除图片边缘的黑线!! SelectObject(hActiveWndCompatibleDC,hActiveWndCompactibleBitmap); //BitBlt(hActiveWndCompatibleDC,0,0,rect.right,rect.bottom,hActiveDC,0,0,SRCCOPY); BitBlt(hActiveWndCompatibleDC,-1,-1,nWidth+2,nHeight+2,hActiveDC,0,0,SRCCOPY); //保存内存DC HDC hBmpFileDC=CreateCompatibleDC(hActiveWndCompatibleDC); HBITMAP hBmpFileBitmap=CreateDIBSection(hActiveWndCompatibleDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0); SelectObject(hBmpFileDC,hBmpFileBitmap); BitBlt(hBmpFileDC,-1,-1,nWidth+2,nHeight+2,hActiveWndCompatibleDC,0,0,SRCCOPY); CString tempFileName=_T(filename);//目标文件名(输入的参数) HANDLE hFile=CreateFile(tempFileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile!=INVALID_HANDLE_VALUE) { DWORD dwRet=0; //填充文件头 BITMAPFILEHEADER bmfHeader; ZeroMemory(&bmfHeader,sizeof(bmfHeader)); bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); bmfHeader.bfSize=bi.bmiHeader.biSizeImage+bmfHeader.bfOffBits; bmfHeader.bfType='MB'; WriteFile(hFile,&bmfHeader,sizeof(bmfHeader),&dwRet,NULL); WriteFile(hFile,&bi.bmiHeader,sizeof(bi.bmiHeader),&dwRet,NULL); WriteFile(hFile,pBits,bi.bmiHeader.biSizeImage,&dwRet,NULL); CloseHandle(hFile); } } 这里抓的图是画图屏幕的大小,很不方便 比如,我要画100×100格子的图,下边和左右都是黑色,如果是1024×1024的画,则有一部分的图形抓不到 请高手帮忙解决 |
|
|
|
20
修改
删除
举报
引用
回复
| |