代码如下 和解? path不管是什么对话框其实路径都是在“我的电脑”上
void oxaGetDir(const char *Title, CString &Path)
{
LPMALLOC pIMalloc ;
if (::SHGetMalloc(&pIMalloc))
{
return;
}
char szBuff[MAX_PATH];
BROWSEINFO bi;
::FillMemory(&bi, sizeof(BROWSEINFO), 0);
bi.hwndOwner = NULL ;// acedGetAcadWinApp() ;   // 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 =  NULL;  // BrowseCallBack;

//returns NULL if user cancels
ITEMIDLIST *browseList = NULL;
browseList = ::SHBrowseForFolder(&bi);
if (browseList)
{
::SHGetPathFromIDList(browseList, szBuff);
Path = szBuff;
pIMalloc->Free(browseList);
}
pIMalloc->Release() ;
}

解决方案 »

  1.   

    http://164.125.165.168/~uliminer/HomePage/Study/mfc/Programming/src_favorite/FolderDialog.h
    http://164.125.165.168/~uliminer/HomePage/Study/mfc/Programming/src_favorite/FolderDialog.cpp
      

  2.   

    我只要一个简单的东西,就是想知道上面的函数为什么进不了缺省路径
    lstrcpy(szPath, Path);
    bi.lParam = (LPARAM)szPath; 无效吗?
      

  3.   

    你试试用sendmessage的方式。
    如果需要,给我发个邮件,我给你一个可以直接指定目录的类:[email protected]
    AFX_INLINE void CFolderDialog::SetSelection( IN LPITEMIDLIST lpItemIDList )
    { ASSERT( m_hWnd != NULL ); 
    ::SendMessage( m_hWnd, BFFM_SETSELECTION, (WPARAM)FALSE, (LPARAM)lpItemIDList ); }