在CFileDialog中,打开时必须是打开一个具体的文件,才能确定,怎么样来选定一个文件夹,就可以确定,然后退出对话框。谢谢

解决方案 »

  1.   

    if(FileDlg.DoModal() == IDOK)
        {
            m_valFileName = FileDlg.GetPathName();
            POSITION Pos;
            Pos = FileDlg.GetStartPosition();        while(Pos)
            {
                m_valFileName = FileDlg.GetNextPathName(Pos);            if(m_valFileName != _T(""))
                {
                    if(m_ctrFileName.FindString(-1, m_valFileName) >= 0)
                    {
                        MessageBox("文件\"" + m_valFileName+"\"已经存在", 
                                   "错误提示", MB_OK|MB_ICONWARNING);
                        continue;
                    }
                    else
                    {
                        m_ctrFileName.AddString(m_valFileName);                }
                } // end of if(m_valFileName != _T(""))
            } // end of while(Pos)
        } // end of if(FileDlg.DoModal() == IDOK)
      

  2.   

    用:SHBrowseForFolder如:
    BROWSEINFO  stBrowseInfo;
    ITEMIDLIST *pstItemIdList; 
    TCHAR        acFilePath[_MAX_PATH]; // open select directory dialog
    memset(&stBrowseInfo, 0, sizeof(BROWSEINFO));
    stBrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS;  pstItemIdList = SHBrowseForFolder(&stBrowseInfo);
    SHGetPathFromIDList(pstItemIdList, acFilePath);
      

  3.   

    我自己前些天也写了一个打开文件夹的小程序,我觉得要打开文件夹不应用CFiledialog函数吧.以下是手写的一段类,可参考....class CDirDialog
    {
    public:    CDirDialog();
        virtual ~CDirDialog();    BOOL DoModal(CWnd *pwndParent = NULL); void SetWindowTitle(CString title){m_strWindowTitle = title;}
    void SetTitle(CString title){m_strTitle = title;}
    void SetSelDir(CString Dir){m_strSelDir = Dir;}
    void SetRootDir(CString Dir){m_strInitDir = Dir;} CString GetWindowText(){return m_strWindowTitle;}
    CString GetTitle(){return m_strTitle;}
    CString GetPathname(){return m_strPath;}protected:
        CString m_strWindowTitle;
        CString m_strPath;
        CString m_strInitDir;
        CString m_strSelDir;
        CString m_strTitle;
        int  m_iImageIndex;
        BOOL m_bStatus;private:   virtual BOOL SelChanged(LPCSTR lpcsSelection, CString& csStatusText) { return TRUE; };
        static int __stdcall CDirDialog::BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
    };