首先创建如下的对话框,并为它创建类Dialog,然后添加一个按钮设置按钮ID为IDC_BTN_VIEW,为按钮添加消息响应函数OnBtnView(),并添加如下代码。
//这个函数可以设置为全局函数
//显示文件夹对话框,返回选中文件夹的路径
CString BrowseForFolder(HWND hWnd)
{
TCHAR szTitle[] = _T("Select a folder");
TCHAR szDisplayName[MAX_PATH] = _T("");
TCHAR szPath[MAX_PATH] = _T("");
BROWSEINFO bi;
bi.hwndOwner = hWnd;
bi.pidlRoot = NULL;
bi.lpszTitle = szTitle;
bi.pszDisplayName = szDisplayName;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
LPITEMIDLIST pItemIDList = SHBrowseForFolder(&bi);
if(pItemIDList)
{
SHGetPathFromIDList(pItemIDList,szPath);
IMalloc *pMalloc;
if(SHGetMalloc(&pMalloc) != NOERROR)
{
TRACE( "Failed to get pointer to shells task allocator" );
return szPath;
}
pMalloc->Free(pItemIDList);
if( pMalloc )
pMalloc->Release();
}
return szPath;
}
//按钮中添加如下代码
void CFtpServerTestDlg::OnBtnView()
{
// TODO: Add your control notification handler code here
/***********************方法一******************************/
//弹出文件夹选择对话框
UpdateData(TRUE);
char szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDir;
bi.lpszTitle = "请选择目录";
bi.ulFlags = BIF_STATUSTEXT | BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
if(pidl == NULL) return;
if(!SHGetPathFromIDList(pidl, szDir))
return;
else
MessageBox(szDir);
UpdateData(FALSE);
/***********************************************************/
/************************方法二*****************************/
CString str = BrowseForFolder(NULL);
MessageBox(str);
/***********************************************************/
}