天天看点

vs2013 MFC打开文件或文件夹对话框(有图有真相)

vs2013环境要求比vc6.0严格些。以前的代码不能直接拿来用,做了些修改。有效果图。

打开文件:

CString gReadFilePathName;
CFileDialog fileDlg(true, _T("mp3"), _T("*.mp3"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("mp3 Files (*.mp3)|*.mp3|wav File(*.wav)|*.wav|All File (*.*)|*.*||"), NULL);
if (fileDlg.DoModal() == IDOK)    //弹出对话框
{
    gReadFilePathName = fileDlg.GetPathName();//得到完整的文件名和目录名拓展名
    GetDlgItem(IDC_EDIT1)->SetWindowText(gReadFilePathName);//将路径显示
    CString filename = fileDlg.GetFileName();
}
           
vs2013 MFC打开文件或文件夹对话框(有图有真相)

打开文件夹:

CFileFind finder;
CString path;
BOOL fileExist;

// 获取特定文件夹的LPITEMIDLIST,可以将之理解为HANDLE
// 所谓的特定文件夹,你可以用CSIDL_XXX来检索之。
LPITEMIDLIST rootLoation;
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &rootLoation);
if (rootLoation == NULL) {
	// unkown error
	return;
}
// 配置对话框
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(bi));
bi.pidlRoot = rootLoation; // 文件夹对话框之根目录,不指定的话则为我的电脑
bi.lpszTitle = _T("对话框抬头"); // 可以不指定
// bi.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS;

// 打开对话框, 有点像DoModal
LPITEMIDLIST targetLocation = SHBrowseForFolder(&bi);
if (targetLocation != NULL) {
	TCHAR targetPath[MAX_PATH];
	SHGetPathFromIDList(targetLocation, targetPath);
	//MessageBox( targetPath );
	GetDlgItem(IDC_EDIT1)->SetWindowText(targetPath);//将路径显示
}
           
vs2013 MFC打开文件或文件夹对话框(有图有真相)