try this:
OnSaveBmp() 
{
   // TODO: Add your command handler code here
    CString sPath;
    CFileDialog dlg(FALSE,".bmp","*.bmp");
    if(dlg.DoModal()==IDOK){
sPath=dlg.GetPathName();
InvalidateRect(NULL, TRUE);
WriteWindowToDIB((LPSTR)(LPCSTR)sPath,this);
    }
}

解决方案 »

  1.   

    我觉得是OnSaveBmp中的这一句WriteWindowToDIB((LPSTR)(LPCSTR)sPath,this);中的this这个参数有问题,那如何得到我的view对应的CWnd *呢?我也曾将函数WriteWindowToDIB(LPTSTR szFile, CWnd *pWnd)
    中的CWindowDC dc(pWnd);改成CClientDC dc(pWnd);
    把pWnd->GetWindowRect(rect);改成pWnd->GetClientRect(rect);
    可结果还是一样的我没辙了
      

  2.   

    TO: yu_hl(卖柴火的小男孩) 我试了,不行
      

  3.   

    这个OnSaveBmp是在哪处理的?不是在view里???
      

  4.   

    把WriteWindowToDIB()函数的功能一分为二:(1)读取屏幕 (2)写到文件,变成两个函数(比如, ReadWindow()和WriteToDIB()),前者在dlg.DoModal()之前调用就可以了,要解决的只剩下如何把第一个函数读取的内容暂存一下传递给第二个函数----方法太多了.
      

  5.   

    TO:pcman1990(pcman) ,对,你一说,我的思路马上就打开了,还可以先保存,等指定文件路径后,再重命名,也可以!
    谢谢大家!