是哪里出了问题呢,大家帮忙看一下
void CColorToGrayDoc::OnFileSave() 
{
// TODO: Add your command handler code here
         CFile file;
CString filename;
CFileDialog dlg(FALSE,"BMP",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*||");
if(dlg.DoModal() == IDOK)
{
filename=dlg.GetPathName();
if(file.Open(filename,CFile::modeCreate|CFile::shareDenyNone,NULL)==0)

//建立文件失败
AfxMessageBox("无法保存文件!",MB_OK,0);
return;
}

//文件头
BITMAPFILEHEADER bf;
//填写文件数据的内容
bf.bfType=0X4d42;//数据类型为'BM'
bf.bfReserved1 =0;
bf.bfReserved2 =0;//保留字'0'
bf.bfOffBits =(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+(DWORD)numQuad*sizeof(RGBQUAD);
bf.bfSize =bf.bfOffBits +pbi->bmiHeader.biSizeImage; //将文件头、位图信息和像素组写入磁盘文件
file.Write (&bf,sizeof(BITMAPFILEHEADER));
file.Write (&pbi,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
file.Write (&pbi->bmiHeader,pbi->bmiHeader.biSizeImage); //关闭文件
file.Close (); }

解决方案 »

  1.   

    把后面两条先屏蔽掉,还是会跳出来那个警告
                      //将文件头、位图信息和像素组写入磁盘文件
    file.Write (&bf,sizeof(BITMAPFILEHEADER));
    //file.Write (&pbi,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
    //file.Write (&pbi->bmiHeader,pbi->bmiHeader.biSizeImage);
      

  2.   

    “对***.bmp的存取被拒绝。”文件在使用!
      

  3.   

    没有使用***.bmp文件呀,***是我新命名的,怎么会是在使用呢?
      

  4.   

    在IDOK处设置了断点,保存对话框弹出来之后设定123.bmp(假定是在D:\123.bmp)单步运行到IDOK,执行完filename=dlg.GetPathName();后,可以看到filename的值就是“D:\123.bmp”。没有错呀?
      

  5.   

    发现问题了,|CFile::shareDenyNone=》|CFile::modeWrite,就OK了,谢谢大家
      

  6.   

    d盘搜索123.bmp看看有几个?
    不应该有这个问题。
    换个名字如xyz.bmp