VC保存文件的问题

dceacho 2009-05-04 11:22:09
void CMainFrame::OnFileSaveAs()
{
// TODO: Add your command handler code here
该怎么写
}
工程是以个单文档窗口,我需要用自己的程序void SaveBmp()保存窗口中显示的图片
void CWeiDraw1View::SaveBmp()
{
//--------------test------------------------------
BITMAPINFO bi;//信息头
void *pBits=NULL;
// CRect rect;//客户区窗口
// GetClientRect(&rect);//默认拷贝区域为客户区大小,可以自行修改rect大小
int nWidth=m_nMaxX;
int nHeight=m_nMaxY;
//填充信息头
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 hActiveDC=m_pMemDC->GetSafeHdc();
HDC hActiveWndCompatibleDC=CreateCompatibleDC(hActiveDC);
// HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,rect.right,rect.bottom);
HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,m_nMaxX,m_nMaxY);
SelectObject(hActiveWndCompatibleDC,hActiveWndCompactibleBitmap);

// BitBlt(hActiveWndCompatibleDC,0,0,rect.right,rect.bottom,hActiveDC,0,0,SRCCOPY);
BitBlt(hActiveWndCompatibleDC,0,0,m_nMaxX,m_nMaxY,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("f://test.bmp");//目标文件名
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);
}

//------------------------
}
现在我在ID_FILE_SAVE_AS的事件该怎么写才能得到用户指定的路径及文件名然后调用SaveBmp保存
...全文
267 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
捕鲸叉 2009-05-07
  • 打赏
  • 举报
回复
单文档模式,为什么不用CDocument缺省的实现?
dceacho 2009-05-04
  • 打赏
  • 举报
回复
谢谢楼上的几位特别三楼,发分了
jame2001 2009-05-04
  • 打赏
  • 举报
回复

CString strSaveFileType = "位图文件 (*.bmp;*.dib)|*.bmp";
CFileDialog FileDlg(FALSE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strSaveFileType);

CFile fileOpen ;
if( FileDlg.DoModal() == IDOK ) {
if(!fileOpen.Open( FileDlg.GetPathName() , CFile::modeCreate|CFile::modeWrite )){
AfxMessageBox("cannot create the file to save");
return;
}
fileOpen.Close();
SaveBmp(FileDlg.GetPathName());
}
void CWeiDraw1View::SaveBmp(CString FileName)
{
}
liliangbao 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
自己用CFileDialog弹出保存的对话框,这样不就知道保存的地址了么
[/Quote]
up
  • 打赏
  • 举报
回复
自己用CFileDialog弹出保存的对话框,这样不就知道保存的地址了么

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧