我在一个对话框程序中产生一个“打开文件”对话框,在选择文件,并点击“打开”按钮后,在程序中调用getfolderpath不能成功,总是出现该死的非法访问错误。查了一下CSDN,说是需要以OFN_EXPLORER风格打开,可是又说OPEN对话框的默认风格就是OFN_EXPLORER型的。我手工加上该风格仍是不行。请大家帮忙!
源码:
// TODO: Add your control notification handler code here
CString Filter= "所有文件(*.*)|*.*|";
CMyFileDialog FileDlg (TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_EXPLORER, Filter);
if( FileDlg.DoModal() == IDOK )                
{
 UpdateData(true);
 CString m_edit1 = FileDlg.GetPathName();
 Cstring m_edit3 = FileDlg.GetFolderPath();//错误出现在该行
 UpdateData(false);
    }

解决方案 »

  1.   

    注意看这个// Other operations available while the dialog is visible
    CString GetFolderPath() const; // return full path以下为源码
    CString CFileDialog::GetFolderPath() const
    {
    ASSERT(::IsWindow(m_hWnd));
    ASSERT(m_ofn.Flags & OFN_EXPLORER); CString strResult;
    if (GetParent()->SendMessage(CDM_GETFOLDERPATH, (WPARAM)MAX_PATH, (LPARAM)strResult.GetBuffer(MAX_PATH)) < 0)
    strResult.Empty();
    else
    strResult.ReleaseBuffer();
    return strResult;
    }点击OK后对话框已经关闭了,所以ASSERT(::IsWindow(m_hWnd));出错你可以用GetFilePath()和GetFileName()来组合路径
      

  2.   

    GetFolderPath();//错误出现在该行我怎么找不到这个函数啊?
      

  3.   

    MFC的源码我也跟了,可是就没办法用这个函数了?
      

  4.   

    你可以使用 GetPathName (); 代替效果也是一样的。
      

  5.   

    或者使用真个也可以 int CommDlg_OpenSave_GetFolderPath(hwnd, lparam, wparam); 能够实现相同的功能。