选择目录对话框和选择文件对话框
2014-12-30 11:05
218 查看
原文:http://www.cppblog.com/finehai/archive/2009/08/27/94578.html
在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法:
选择目录对话框
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//选择目录按钮
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void CDcPackerDlg::OnBnClickedDecgen()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
char szPath[MAX_PATH]; //存放选择的目录路径
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
CString str;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
ZeroMemory(szPath, sizeof(szPath));
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
BROWSEINFO bi;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.hwndOwner = m_hWnd;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.pidlRoot = NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.pszDisplayName = szPath;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.lpszTitle = "请选择需要打包的目录:";
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.ulFlags = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.lpfn = NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.lParam = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.iImage = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//弹出选择目录对话框
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(lp && SHGetPathFromIDList(lp, szPath))
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str.Format("选择的目录为 %s", szPath);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
AfxMessageBox(str);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
AfxMessageBox("无效的目录,请重新选择");
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
选择文件对话框
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
CString CDcPackerDlg::BootOpenDialog() //返回选择的文件名称
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
CString strFile = _T("");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (dlgFile.DoModal())
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
strFile = dlgFile.GetPathName();
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return strFile;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//加载文件按钮
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void CDcPackerDlg::OnBnClickedSelectdec()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
// TODO: Add your control notification handler code here
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m_strDescPath = ""; //类的成员变量
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//"打开文件"对话框,选择文件,返回其路径
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m_strDescPath = BootOpenDialog();
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法:
选择目录对话框
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//选择目录按钮
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void CDcPackerDlg::OnBnClickedDecgen()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
char szPath[MAX_PATH]; //存放选择的目录路径
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
CString str;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
ZeroMemory(szPath, sizeof(szPath));
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
BROWSEINFO bi;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.hwndOwner = m_hWnd;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.pidlRoot = NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.pszDisplayName = szPath;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.lpszTitle = "请选择需要打包的目录:";
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.ulFlags = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.lpfn = NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.lParam = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bi.iImage = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//弹出选择目录对话框
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(lp && SHGetPathFromIDList(lp, szPath))
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str.Format("选择的目录为 %s", szPath);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
AfxMessageBox(str);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
AfxMessageBox("无效的目录,请重新选择");
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
选择文件对话框
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
CString CDcPackerDlg::BootOpenDialog() //返回选择的文件名称
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
CString strFile = _T("");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (dlgFile.DoModal())
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
strFile = dlgFile.GetPathName();
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return strFile;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//加载文件按钮
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void CDcPackerDlg::OnBnClickedSelectdec()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
// TODO: Add your control notification handler code here
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m_strDescPath = ""; //类的成员变量
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//"打开文件"对话框,选择文件,返回其路径
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m_strDescPath = BootOpenDialog();
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
相关文章推荐
- 打开文件对话框与目录选择对话框
- [MFC]选择目录对话框和选择文件对话框(ZZ)
- 选择目录对话框和选择文件对话框
- VC++实现文件选择对话框 及目录
- VC中选择文件目录和打开文件对话框
- 设置Java Swing的文件选择对话框只选择目录的方法
- 打开文件对话框与目录选择对话框
- 选择目录对话框和选择文件对话框——CFileDialog
- [MFC]选择目录对话框和选择文件对话框
- VC文件目录选择对话框(任意目录)
- 目录选择对话框、文件打开或保存对话框、字体对话框和颜色对话框
- 支持选择文件和目录(可多选)的文件对话框CSelectDialog
- 选择目录对话框和选择文件对话框
- 打开文件对话框与目录选择对话框
- 浏览...(Browse...):目录选择和文件选择 对话框
- 选择目录对话框和选择文件对话框
- 如何在JSP页面中通过一个按钮,在对话框中选择一个目录而不是选择一个文件;input type=file只能选择一个文件,我想选择一个目录;做不出来项目经理要扣奖金的...............
- MFC选择目录SHBrowseForFolder选择文件CFileDialog对话框设置默认路径
- VC++, MFC中实现选择文件夹,选择文件对话框,确定当前工作目录(转载)
- MFC 选择文件对话框/打开目录对话框