这个函数会出现定位在 我的电脑 的文件夹选择对话框上,但是如果我想让它定位到某一个用户的路径上(比如 E:\gdk\标准模块 这个文件夹上),应该怎么做??
是用 SHParseDisplayName 函数吗? 但是它好象只用于 XP 上,我的 VC 不支持这个函数!怎么解决啊?
  
   谢谢!!

解决方案 »

  1.   

    BROWSEINFO bi;   //必须传入的参数,下面就是这个结构的参数的初始化
    CString strDisplayName;   //用来得到,你选择的活页夹路径,相当于提供一个缓冲区
    bi.hwndOwner=GetSafeHwnd();   //得到父窗口Handle值
    bi.pidlRoot=pidlRoot;   //这个变量就是我们在上面得到的.
    bi.pszDisplayName=strDisplayName.GetBuffer(MAX_PATH+1);   //得到缓冲区指针,
    bi.lpszTitle=”网上邻居”;   //设置标题
    bi.ulFlags=BIF_BROWSEFORCOMPUTER;   //设置标志
    bi.lpfn=NULL;
    bi.lParam=0;
    bi.iImage=0;   //上面这个是一些无关的参数的设置,最好设置起来,
    SHBrowseForFolder(&lpbi);   //打开对话框
    strDisplayName.ReleaseBuffer();   //和上面的GetBuffer()相对应
      

  2.   

    int CALLBACK BrowseCallBack(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
    {
    if (uMsg == BFFM_INITIALIZED)
    {
    SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData) ;
    }
    return 0 ;
    }void CAddDlg::GetDir(const char *Title, CString &Path)
    {
    LPMALLOC pIMalloc ;
    if (::SHGetMalloc(&pIMalloc))
    {
    return;
    }
    char szBuff[MAX_PATH];
    BROWSEINFO bi;
    ::FillMemory(&bi, sizeof(BROWSEINFO), 0);
    bi.hwndOwner = m_hWnd;
    bi.pidlRoot = NULL;
    bi.pszDisplayName = szBuff; //text to display within the dialog
    bi.lpszTitle = Title;
    bi.ulFlags = BIF_RETURNONLYFSDIRS;// only want folders // this is the directory you want to start from
    char szPath[MAX_PATH];
    lstrcpy(szPath, Path);
    bi.lParam = (LPARAM)szPath;
    bi.lpfn = BrowseCallBack; //returns NULL if user cancels
    ITEMIDLIST *browseList = NULL;
    browseList = ::SHBrowseForFolder(&bi);
    if (browseList)
    {
    ::SHGetPathFromIDList(browseList, szBuff);
    Path = szBuff;
    pIMalloc->Free(browseList);
    }
    pIMalloc->Release() ;
    }