使用MFC开发程序时,有时需要选择文件夹,可使用SHBrowseForFolder解决,但此方法并不支持初始化选择路径。
博客主页:http://blog.csdn.net/xs1102
文章地址:http://blog.csdn.net/xs1102/article/details/77170181
打开文件夹对话框,代码如下:
BROWSEINFO bi;
TCHAR Buffer[MAX_PATH];
bi.hwndOwner = NULL;
bi.pidlRoot =NULL;
bi.pszDisplayName = Buffer;
bi.lpszTitle = _T("选择文件夹:");
bi.ulFlags = BIF_STATUSTEXT | BIF_USENEWUI | BIF_RETURNONLYFSDIRS;
//打开选择文件夹对话框
LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);
if(pIDList)
{
//获取文件夹路径
SHGetPathFromIDList(pIDList, Buffer);
}
上述代码可以打开一个对话框选择窗口,但并不能设置初始化路径。
设置初始化路径可以设置一个回调函数,在初始化完成之后设置选定的路径。
bi.lParam = (LPARAM)(TCHAR*)temppath;
bi.lpfn = OpenFolderProc;
回调函数定义如下:
//打开文件夹对话框的回调函数
int CALLBACK OpenFolderProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
if(uMsg == BFFM_INITIALIZED)
{
//输出选择的文件夹
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
}
return 0;
}
此时,便可以设置初始文件夹了。
为了进一步方便使用,还可以封装成一个类。
我这里不再贴出代码,需要的请自行下载。