由于c++自带的 CFileDialog,只能打开文件,不能打开文件夹,故为了使用方便,封装了一个可以打开文件夹的。
打开文件夹的封装:
bool OpenFolder(HWND hwndOwner/*=NULL*/, CString& strFolder)
{
//选择文件夹
BROWSEINFO info;
info.hwndOwner=hwndOwner;
info.pidlRoot=NULL;
info.pszDisplayName=NULL;
info.lpszTitle=_T("请选择路径");
info.ulFlags=BIF_RETURNONLYFSDIRS|BIF_USENEWUI;
info.lpfn =NULL;
info.iImage =0;
LPCITEMIDLIST pidl=SHBrowseForFolder(&info);
if(!pidl)
return false;
TCHAR szDisplayName[255];
SHGetPathFromIDList(pidl,szDisplayName);
strFolder = szDisplayName;
//因为不确定传入的路径是否包含\,所以先删除再进行添加
strFolder.TrimRight(_T("\\"));
strFolder += _T("\\");
return true;
}
调用:
CString strFolder;//用于接收返回的路径
OpenFolder(NULL ,strFolder);