VC++下怎样选择一个路径,是用OpenDialog对话框吗?

解决方案 »

  1.   

    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 );
    }
    }
    }
      

  2.   

    BOOL CNetSniperView::BrowseFolder(CString &sFolderPath, CString sTitle)
    {
    BROWSEINFO bi;
    char Buffer[_MAX_PATH];
    //初始化入口参数
    bi.hwndOwner=NULL;
    bi.pidlRoot=NULL;
    bi.pszDisplayName=Buffer;
    bi.lpszTitle=sTitle;
    bi.ulFlags=0;
    bi.lpfn=NULL;
    LPITEMIDLIST pIDList=SHBrowseForFolder(&bi);
    //用户取消操作
    if(!pIDList)
       return FALSE;
    SHGetPathFromIDList(pIDList,Buffer);
    sFolderPath = Buffer;
    LPMALLOC lpMalloc;
    if(FAILED(SHGetMalloc(&lpMalloc)))
       return false;
    lpMalloc->Free(pIDList);
    lpMalloc->Release(); return TRUE;
    }