一. 示例代码
CString iDir;
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = m_Dir.GetBuffer(512);
bi.lpszTitle = _T("选择保存的文件夹");
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
ITEMIDLIST* pidl = ::SHBrowseForFolder(&bi);
if (::SHGetPathFromIDList(pidl, m_Dir.GetBuffer(512)))
m_Dir.ReleaseBuffer();
二. ROWSEINFO结构说明
hwndOwner: 对话框的所有者
pidlRoot: 从何根路径开始展开文件夹,缺省情况下从“桌面”开始展开.
pszDisplayName: 指向一个缓存,该缓存返回用户选中的文件夹的显示名称,
缓存的大小设置为MAX_PATH
lpszTitle: 对话框上的treeview控件上方显示的标题, 并不是对话框的标题
ulFlags: 显示标志控制项.
BIF_RETURNONLYFSDIRS, 只有当用户选中的是文件夹时"确定"按钮才有效
BIF_BROWSEFORCOMPUTER, 只有选中"我的电脑"时"确定"按钮才有效
BIF_EDITBOX, 在对话框上显示一个Edit,允许用户输入选中项的名称
BIF_STATUSTEXT, 界面上包含一块statu区域, 回调函数通过向对话框发送
BFFM_SETSTATUSTEXT消息设置静态文本
BIF_VALIDATE, 当用户在Edit中输入不正确的名字时,向对话框发送
BFFM_VALIDATEFAILED消息,并调用对话框的回调函数处理该消息
lpfn 设置处理对话框事件的回调函数
lParam 对话框传递给回调函数的参数
iImage 返回与选中文件夹关联的图片的index , 该index是图片在系统ImageList中的index值.
三. SHBrowseForFolder函数
view plaincopy to clipboardprint?
LPITEMIDLIST WINAPI SHBrowseForFolder(
LPBROWSEINFO lpbi
);
该函数显示文件夹选择对话框, 并允许用户选择文件夹.返回值是指向一个ITEMIDLIST结构的指针, 该结构指定根目录下用户选中的文件夹. 如果在对话框上用户选择的 "取消"按钮, 则返回NULL四. SHGetPathFromIDList函数
四. SHGetPathFromIDList函数
WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(
LPCITEMIDLIST pidl,
LPSTR pszPath
);
该函数将ITEMIDLIST结构转换为文件系统路径.
pidl是待转换的ITEMIDLIST的指针
pszPath是转换后返回的字符串, 该字符串的最大长度为PATH_MAX
如果转换成功返回TRUE, 否则为FALSE
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ShardowM/archive/2008/06/06/2516213.aspx