浏览文件夹对话框

来源:互联网 发布:好玩的网络手机游戏 编辑:程序博客网 时间:2024/05/08 12:10
  如果打开浏览文件夹对话框,并且执行成功之后,程序的当前活动路径即修改为该对话框选定的路径,即如果创建相对路径下的一个文件,该文件的路径是相对于浏览文件夹对话框选定的路径。
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;
      BROWSEINFO结构体保存了用户选择目录的重要信息。
typedef struct _browseinfoW {
    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;
原创粉丝点击