做了一个断点续传的小程序,遇到一个小问题,就是续传时候,调用CFileDialog来保存续传文件时,按系统默认的会出现“是否覆盖文件”的提示,现在我想改改它,使得它提示“是否续传文件”,应该怎么做。谢谢!

解决方案 »

  1.   

    查一下msdn把,这个东西我以前刚做过。最好养成自己随手查阅msdn的能力,这种问题就不要拿出来问了。
      

  2.   


    class CMyFileDialog : public CFileDialog
    重载函数: virtual BOOL OnFileNameOK();
    BOOL CMyFileDialog::OnFileNameOK()
    {
    // TODO: 在此添加专用代码和/或调用基类
    CString nFileName;
    if(GetFileAttributes(nFileName)!=-1)
    if(AfxMessageBox("该文件存在,是否续传文件?",MB_YESNO)!=IDYES)
    return true;
    return CFileDialog::OnFileNameOK();
    }
      

  3.   

    建议楼上的还是将-1改为INVALID_FILE_ATTRIBUTES,还是用人家给好的。
      

  4.   

    好像还是不行,
    GetFileAttributes(nFileName)!=-1 
    这句是判断文件是否已经存在的吗?
      

  5.   

    已经加分了,请liuyan4794(青牛)帮帮忙。
      

  6.   

    你需要先建立一个新类,该类继承自CFileDialog,然后重载CFileDialog的OnFileNameOK,GetFileAttributes(nFileName)!=INVALID_FILE_ATTRIBUTES时,你应该先看看nFileName是否已经包含了后缀,如果没有则需要加上后缀
      

  7.   

    ////////////////////////////////////////////////MyDlg.h
    class CMyDlg : public CFileDialog
    {
    DECLARE_DYNAMIC(CMyDlg)public:
    CMyDlg(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
    LPCTSTR lpszDefExt = NULL,
    LPCTSTR lpszFileName = NULL,
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    LPCTSTR lpszFilter = NULL,
    CWnd* pParentWnd = NULL); 
    protected:
    //{{AFX_MSG(CMyDlg)
    virtual  BOOL  OnFileNameOK(); 
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };/////////////////////////////////////////////////////MyDlg.cpp
    IMPLEMENT_DYNAMIC(CMyDlg, CFileDialog)CMyDlg::CMyDlg(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
    DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
    CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
    {
    }
    BEGIN_MESSAGE_MAP(CMyDlg, CFileDialog)
    //{{AFX_MSG_MAP(CMyDlg)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()BOOL CMyDlg::OnFileNameOK()  
    {  
          //  TODO:  在此添加专用代码和/或调用基类  
          CString  nFileName;  
          if(GetFileAttributes(nFileName)!=INVALID_FILE_ATTRIBUTES)
    if(AfxMessageBox(  "该文件存在,是否续传文件?",MB_YESNO)!=IDYES)                    
      return  true;  
              
      return  CFileDialog::OnFileNameOK();  
    } 编译时出错,error C2065: 'INVALID_FILE_ATTRIBUTES' : undeclared identifier。
      

  8.   

    直接这样写就可以
    if(GetFileAttributes(nFileName)!=-1)
      

  9.   

    调用时不用使用OnFileNameOK吗?
    CMyDlg dlg;
    if (dlg.DoModle==IDOK)
        ……
    这样就行了吗?
      

  10.   

    //这样调用可以的啊,你测试试试就知道了,不用使用OnFileNameOK
    CMyDlg dlg;
    if (dlg.DoModle==IDOK)
        ……