在MFC中有没有已经做好的对话框, 象CFileDialog一一样. 但只显示文件夹,返回文件夹路径,不显示文件?

解决方案 »

  1.   

    我也想知道啊
    谁来说说吧
    CWnd *pWnd =GetDlgItem(IDD_SETPATHBOX);
    pWnd->EnableWindow (FALSE);
    BROWSEINFO bi;
    ZeroMemory(&bi, sizeof(bi));  TCHAR szDisplayName[MAX_PATH];
    TCHAR m_szSelected[MAX_PATH];
    szDisplayName[0] = '\0';
    m_szSelected[0] = '\0'; HWND ho=pWnd->Detach();
    bi.hwndOwner =ho;
    bi.pidlRoot = NULL;
    bi.pszDisplayName = szDisplayName;
    bi.lpszTitle = TEXT("选择要操作的文件夹");
    bi.ulFlags = BIF_EDITBOX | BIF_VALIDATE ;//不显示EDITBOX
    bi.lParam = NULL;
    bi.iImage = 0;
    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
    我高了这么一段代码,但是非法操作,救救我啊
    如果把bi.hwndOwner 赋NULL则是非模式对话框,怎么解决?
      

  2.   

    http://expert.csdn.net/Expert/topic/1208/1208531.xml?temp=.8815119
      

  3.   

    char  lpBuffer[MAX_PATH], buf[1024]; 
    LPMALLOC pMalloc;
    SHGetMalloc(&pMalloc);BROWSEINFO bi;
    int i = 0;
    LPITEMIDLIST pidlBrowse;    // PIDL selected by user  memset(lpBuffer, 0, sizeof(lpBuffer));
    memset(buf, 0, sizeof(buf));

    // Fill in the BROWSEINFO structure.
    bi.hwndOwner = m_hWnd; 
    bi.pidlRoot = NULL;
    bi.pszDisplayName = lpBuffer; 
    bi.lpszTitle = "选择HTML文件存放的目录";
    bi.ulFlags = 0; 
    bi.lpfn = NULL;
    bi.lParam = 0;  
        
    // Browse for a folder and return its PIDL. 
    pidlBrowse = SHBrowseForFolder(&bi);
    if (pidlBrowse != NULL)
    {  
            // Show the display name, title, and file system path. 
            if (SHGetPathFromIDList(pidlBrowse, lpBuffer)) 
                //you got the path here         // Free the PIDL returned by SHBrowseForFolder. 
            pMalloc->Free(pidlBrowse);}
      

  4.   

    inline int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, 
                                           LPARAM lParam, LPARAM lpData)
    {
    _TCHAR szDir[_MAX_PATH]; switch(uMsg)
    {
    case BFFM_INITIALIZED: // 初始化
    break; case BFFM_SELCHANGED: // 路径改变
         if( SHGetPathFromIDList( (LPITEMIDLIST)lParam, szDir ) )
    SendMessage( hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szDir );
         break;

    default:
    break;
    }

    return 0;
    }void CDlgOptionCapture::OnPathOpen() 
    {
    // TODO: Add your control notification handler code here
    _TCHAR pszDisplayName[MAX_PATH];
    BROWSEINFO bi;
    LPITEMIDLIST lpID; // 设置参数
    bi.hwndOwner = GetSafeHwnd(); // Handle to the owner window
    bi.pidlRoot = NULL;          // Location of root folder
    bi.pszDisplayName = pszDisplayName; // Folder name selected
    bi.lpszTitle = _T("选择路径"); // Title name
    bi.ulFlags = BIF_RETURNONLYFSDIRS | 
                          BIF_STATUSTEXT;         // Option flags
    bi.lpfn = BrowseCallbackProc;        // Callback function
    bi.lParam = 0;           // LPARAM
    bi.iImage = NULL;                    // Image selected lpID = SHBrowseForFolder( &bi );
    if( lpID != NULL )
    {
    if( SHGetPathFromIDList( lpID, pszDisplayName ) )
    {
    m_strPath = pszDisplayName;
    if( m_strPath[m_strPath.GetLength() - 1] != '\\' )
    m_strPath += _T('\\');
    UpdateData( FALSE );
    }
    }
    }
      
      

  5.   

    如需要的话,我发一个类给你。
    QQ:59377629
    [email protected]