MFC应用实例:[26]选择文件夹对话框
1、新建一个基于对话框的应用程序,应用程序名称为OpenDir。
![MFC应用实例:[26]选择文件夹对话框](https://exp-picture.cdn.bcebos.com/01bd69f7980e5f204ec7a668bd20b93acc898e09.jpg)
2、对对话框进行如下图的设计添加“打开文件夹”按钮,并对这个按钮添加对应的响应函数。
![MFC应用实例:[26]选择文件夹对话框](https://exp-picture.cdn.bcebos.com/3761a73acd8920c535b97186568a59de44078809.jpg)
3、在“打开文件夹”按钮的函数OnButtonOpendir()中添加一下代码:
#define BIF_NEWDIALOGSTYLE 0x0040
void COpenDirDlg::OnButtonOpendir() //打开目录
{
HWND hwnd= GetSafeHwnd(); //得到窗口句柄
CString filePath= ""; //得到文件路径
LPMALLOC pMalloc;
if (::SHGetMalloc(&pMalloc) == NOERROR) //取得IMalloc分配器接口
{
BROWSEINFO bi;
TCHAR pszBuffer[MAX_PATH];
LPITEMIDLIST pidl;
bi.hwndOwner = hwnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = pszBuffer;
bi.lpszTitle = _T("选择文件夹"); //选择目录对话框的上部分的标题
//添加新建文件夹按钮 BIF_NEWDIALOGSTYLE
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS | BIF_RETURNFSANCESTORS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
if ((pidl = ::SHBrowseForFolder(&bi)) != NULL) //取得IMalloc分配器接口
{
if (::SHGetPathFromIDList(pidl, pszBuffer)) //获得一个文件系统路径
{
filePath = pszBuffer;
}
pMalloc->Free(pidl); //释放内存
MessageBox(filePath);
}
pMalloc->Release(); //释放接口
}
}
![MFC应用实例:[26]选择文件夹对话框](https://exp-picture.cdn.bcebos.com/dccb47de4507880121c62cf2b18ca608a40f8209.jpg)
4、程序运行如下:
![MFC应用实例:[26]选择文件夹对话框](https://exp-picture.cdn.bcebos.com/3931cb413a8ca608b8b96d4fdb8c9bcec6f8fe09.jpg)
5、打开一个文件夹后如图:
![MFC应用实例:[26]选择文件夹对话框](https://exp-picture.cdn.bcebos.com/a44e8afc508c9bcee64e73c4d6dd884ce44afa09.jpg)