如果打开浏览文件夹对话框,并且执行成功之后,程序的当前活动路径即修改为该对话框选定的路径,即如果创建相对路径下的一个文件,该文件的路径是相对于浏览文件夹对话框选定的路径。
BROWSEINFO bi ;
TCHAR szPathName[MAX_PATH];
CString str = L"";
CString strDir = L""; //选择的目录
TCHAR szTitle[] = _T("选择清除路径");
memset(&bi,0,sizeof(BROWSEINFO));
memset(szPathName,0,MAX_PATH);
bi.hwndOwner = GetSafeHwnd(); //获得窗口句柄
bi.pszDisplayName = szPathName;
bi.lpszTitle = szTitle;
bi.ulFlags = BIF_EDITBOX | BIF_STATUSTEXT;
LPITEMIDLIST idl = SHBrowseForFolder(&bi);
if(NULL == idl)
{
strDir = "";
return ;
}
SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH * 2));
str.ReleaseBuffer();
if(str != "" && str.GetAt(str.GetLength() - 1) != '\\')
str += '\\';
strDir = str;
CString str = L"";
CString strDir = L""; //选择的目录
TCHAR szTitle[] = _T("选择清除路径");
memset(&bi,0,sizeof(BROWSEINFO));
memset(szPathName,0,MAX_PATH);
bi.hwndOwner = GetSafeHwnd(); //获得窗口句柄
bi.pszDisplayName = szPathName;
bi.lpszTitle = szTitle;
bi.ulFlags = BIF_EDITBOX | BIF_STATUSTEXT;
LPITEMIDLIST idl = SHBrowseForFolder(&bi);
if(NULL == idl)
{
strDir = "";
return ;
}
SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH * 2));
str.ReleaseBuffer();
if(str != "" && str.GetAt(str.GetLength() - 1) != '\\')
str += '\\';
strDir = str;
BROWSEINFO结构体保存了用户选择目录的重要信息。
typedef struct _browseinfoW {
HWND hwndOwner; //浏览文件夹对话框的父窗体句柄
PCIDLIST_ABSOLUTE pidlRoot; //ITEMDLIST结构体的地址,包含浏览时的初始根目录,而且只有被指定的目录和其子目录才显示在浏览文件夹对话框中,当指定其为NULL时,桌面目录将被使用。
LPWSTR pszDisplayName; // 用来保存用户选中的目录字符串的内存地址。该缓冲区的内存大小缺省定义是MAX_PATH。
LPCWSTR lpszTitle; // 浏览文件夹对话框中显示的文本
UINT ulFlags; // 描述对话框的选项
HWND hwndOwner; //浏览文件夹对话框的父窗体句柄
PCIDLIST_ABSOLUTE pidlRoot; //ITEMDLIST结构体的地址,包含浏览时的初始根目录,而且只有被指定的目录和其子目录才显示在浏览文件夹对话框中,当指定其为NULL时,桌面目录将被使用。
LPWSTR pszDisplayName; // 用来保存用户选中的目录字符串的内存地址。该缓冲区的内存大小缺省定义是MAX_PATH。
LPCWSTR lpszTitle; // 浏览文件夹对话框中显示的文本
UINT ulFlags; // 描述对话框的选项
//BIF_EDITBOX 浏览对话框中包含一个编辑框,在该编辑框中可输入选中项的名字
//BIF_STATUSTEXT 在对话框中包含一个状态区域,通过给对话框发送消息使回调函数设置状态文本。
//BIF_VALIDATE 当没有BIF_EDITBOX标志位时,该标志位被忽略。如果用户在编辑框中输入的名字非法,该对话框将发送BFFM_VALIDATEFAILED消息给回调函数
BFFCALLBACK lpfn; //应用程序定义的浏览文件夹对话框回调函数的地址
LPARAM lParam; // 对话框传递给回调函数的一个参数指针
int iImage; // 与选中目录相关的图像,该图像将被指定为系统图像列表中的索引值
} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;
BFFCALLBACK lpfn; //应用程序定义的浏览文件夹对话框回调函数的地址
LPARAM lParam; // 对话框传递给回调函数的一个参数指针
int iImage; // 与选中目录相关的图像,该图像将被指定为系统图像列表中的索引值
} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;