首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC(怎么将视图窗口中的自绘图,以图片方式保存最好是.BMP格式!),求!立即给分

2012-01-24 
MFC(如何将视图窗口中的自绘图,以图片方式保存最好是.BMP格式!),急求!!!立即给分如何将视图窗口中的自绘图

MFC(如何将视图窗口中的自绘图,以图片方式保存最好是.BMP格式!),急求!!!立即给分
如何将视图窗口中的自绘图,以图片方式保存最好是.BMP格式!并且保存的图片要刚好是客户区范围之内的,同时因为我的图形会随时放大,所以也要不停的进行删除内存中保存的图片的和重新生成,请问怎么办??/

比如,我在图口中画了一个三角形,两个圆如何把他们保存成图形文件?



[解决办法]
void CXXXView::SaveToBmp()
{
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;

//拷贝客户区至内存DC
HDC hActiveDC=::GetDC(this-> m_hWnd);
HDC hActiveWndCompatibleDC=CreateCompatibleDC(hActiveDC);
HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,rect.right,rect.bottom);
SelectObject(hActiveWndCompatibleDC,hActiveWndCompactibleBitmap);

BitBlt(hActiveWndCompatibleDC,0,0,rect.right,rect.bottom,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,0,0,nWidth,nHeight,hActiveWndCompatibleDC,0,0,SRCCOPY);

CString tempFileName=_T( "test.bmp ");//目标文件名
CFileDialog dlg(FALSE, _T( "bmp "), _T( "Temp.bmp "), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T( "Bitmap Files (*.bmp)|*.bmp|All Files (*.*)|*.*|| "), this);
if(dlg.DoModal() == IDOK)
{
tempFileName=dlg.GetPathName();
}
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);
}
}

热点排行