"浏览文件夹"选择对话框
来源:互联网 发布:积极网络用语 编辑:程序博客网 时间:2024/05/17 23:03
CFileDialog是打开/保存文件对话框,但是无法用于文件夹的选取。要选择文件夹,可以使用API SHBrowseForFolder,但是这个函数在MFC中没有提供封装类。示例操作如下:
// 调用 SHBrowseForFolder 取得目录(文件夹)名称
// 参数 hWnd: 父窗口句柄
// 参数 lpTitle: 窗口标题
CString BrowseFolder(HWND hWnd, LPCTSTR lpTitle)
...{
char szPath[MAX_PATH]=...{0};
BROWSEINFO m_bi;
m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
m_bi.hwndOwner = hWnd;
m_bi.pidlRoot = NULL;
m_bi.lpszTitle = lpTitle;
m_bi.lpfn = NULL;
m_bi.lParam = NULL;
m_bi.pszDisplayName = szPath;
LPITEMIDLIST pidl = ::SHBrowseForFolder( &m_bi );
if ( pidl )
...{
if( !::SHGetPathFromIDList ( pidl, szPath ) ) szPath[0]=0;
IMalloc * pMalloc = NULL;
if ( SUCCEEDED ( ::SHGetMalloc( &pMalloc ) ) ) // 取得IMalloc分配器接口
...{
pMalloc->Free( pidl ); // 释放内存
pMalloc->Release(); // 释放接口
}
}
return szPath;
}
// 参数 hWnd: 父窗口句柄
// 参数 lpTitle: 窗口标题
CString BrowseFolder(HWND hWnd, LPCTSTR lpTitle)
...{
char szPath[MAX_PATH]=...{0};
BROWSEINFO m_bi;
m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
m_bi.hwndOwner = hWnd;
m_bi.pidlRoot = NULL;
m_bi.lpszTitle = lpTitle;
m_bi.lpfn = NULL;
m_bi.lParam = NULL;
m_bi.pszDisplayName = szPath;
LPITEMIDLIST pidl = ::SHBrowseForFolder( &m_bi );
if ( pidl )
...{
if( !::SHGetPathFromIDList ( pidl, szPath ) ) szPath[0]=0;
IMalloc * pMalloc = NULL;
if ( SUCCEEDED ( ::SHGetMalloc( &pMalloc ) ) ) // 取得IMalloc分配器接口
...{
pMalloc->Free( pidl ); // 释放内存
pMalloc->Release(); // 释放接口
}
}
return szPath;
}
对于打开文件夹对话框的操作,使用API是比较繁琐的事情。许多人都对它进行了封装,如下面的文章中所述:
原文: Counting MDI Children, Browsing for Folders
翻译: 计算MDI子窗口数,仅显示文件夹的打开对话框
CFileDialog有时候也不完全满足需求,此时可进行自定义扩展对话框功能,一个非常不错的例子:
定制CFileDialog对话框
- "浏览文件夹"选择对话框
- 文件选择对话框,文件夹浏览
- 使用"文件浏览"对话框选择文件夹
- VC 使用"文件浏览"对话框选择文件夹
- VB6.0 浏览文件夹对话框 选择文件保存路径
- 文件夹浏览对话框类
- EVC浏览文件夹对话框
- 创建浏览文件夹对话框
- 创建浏览文件夹对话框 .
- 浏览文件夹对话框
- vba 浏览文件夹对话框
- 浏览文件夹对话框
- 浏览文件夹对话框
- 如何显示浏览文件夹对话框
- 浏览文件夹对话框代码段
- FolderBrowserDialog(文件夹浏览对话框)
- FolderBrowserDialog(文件夹浏览对话框)
- 通用对话框专题之浏览文件夹对话框
- (转)ESB简介
- java程序员必须掌握的linux知识
- StringTokenizer:字符串分隔解析类型
- 华南虎事件续篇之二:周正龙已被警方带走 行踪成谜
- SQL Server 2000设置和使用数据库复制
- "浏览文件夹"选择对话框
- 国际投行巨头集体唱衰A股
- tcpdump使用说明
- Microsoft 资源和技术追踪专帖
- 三大寒流袭来 跌破5000点才能止跌
- [收藏]使 IE7 变得更快
- Asp检查组件是否已经安装函数
- 令人深思的教育问题:中美差距从儿童就已拉开
- Asp生成随机数函数函数