浏览...(Browse...):目录选择和文件选择 对话框

本文转载自:http://www.cppblog.com/finehai/archive/2009/08/27/94578.aspx

在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法:

选择目录对话框

 1 //选择目录按钮
2 void CDcPackerDlg::OnBnClickedDecgen()
3 {
4 char szPath[MAX_PATH]; //存放选择的目录路径
5 CString str;
6
7 ZeroMemory(szPath, sizeof(szPath));
8
9 BROWSEINFO bi;
10 bi.hwndOwner = m_hWnd;
11 bi.pidlRoot = NULL;
12 bi.pszDisplayName = szPath;
13 bi.lpszTitle = _T("请选择需要打包的目录:");
14 bi.ulFlags = 0;
15 bi.lpfn = NULL;
16 bi.lParam = 0;
17 bi.iImage = 0;
18 //弹出选择目录对话框
19 LPITEMIDLIST lp = SHBrowseForFolder(&bi);
20
21 if(lp && SHGetPathFromIDList(lp, szPath))
22 {
23 str.Format(_T("选择的目录为 %s"), szPath);
24 AfxMessageBox(str);
25 }
26 else
27 AfxMessageBox(_T("无效的目录,请重新选择"));
28 }

在Unicode环境里,char szPath[MAX_PATH] 定义出来的szPath不符合要求,会产生:

error C2440: “=”: 无法从“char [256]”转换为“LPWSTR”

的错误。

只需要:

WCHAR szPath[MAX_PATH];

  即可。



选择文件对话框

 1 //返回选择的文件路径
2 CString CDcPackerDlg::BootOpenDialog()
3 {
4 CString strFilePath = _T("");
5 CString strFileName;
6
7 CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY,
8 _T("Descri be Files (*.cfg)|*.cfg|All Files
9 (*.*)|*.*||"), NULL);
10
11 if (dlgFile.DoModal())
12 {
13 //得到文件路径
14 strFilePath = dlgFile.GetPathName();
15 //得到文件名字,可用于拷贝文件时DesFileName参数的拼接
16 strFileName = dlgFile.GetFileName();
17 }
18
19 return strFilePath;
20 }
21
22 //接收文件路径
23 void CDcPackerDlg::OnBnClickedSelectdec()
24 {
25 m_strDescPath = ""; //类的成员变量
26
27 m_strDescPath = BootOpenDialog();
28 }





posted on 2011-09-05 13:48  LateStop  阅读(695)  评论(0)    收藏  举报

导航