在项目中,我们有时需要对一些文件进行处理。这时,我们需让用户从资源管理器中选择这些文件。函数的功能是实现弹出文件选择对话框,并获取用户选择的文件。
文件选择对话框实现代码:
bool FilesSelect( CString &csFilesPath )
{
//csFilesPath.Empty();
CString _csFilesStyle(_T("My Files|*.txt|All files|*.*|"));//待选择文件的格式
CFileDialog _dlgFileDlg( TRUE , NULL , NULL , OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT , _csFilesStyle );//TRUE为OPEN对话框,FALSE为SAVE AS对话框
//_dlgFileDlg.m_ofn.lpstrInitialDir = _T("C:\\"); //这里设置对话框的默认目录
if ( IDOK == _dlgFileDlg.DoModal() )
{
for( POSITION posPos = _dlgFileDlg.GetStartPosition() ; posPos ; csFilesPath += _dlgFileDlg.GetNextPathName(posPos) + _T("\r\n") );
return true;
}
return false;
}
bool FilesSelect( std::vector &vecFilesPath )
{
//vecFilesPath.clear();
CString _csFilesStyle(_T("My Files|*.txt|All files|*.*|"));//待选择文件的格式
CFileDialog _dlgFileDlg( TRUE , NULL , NULL , OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT , _csFilesStyle );//TRUE为OPEN对话框,FALSE为SAVE AS对话框
//_dlgFileDlg.m_ofn.lpstrInitialDir = _T("C:\\"); //这里设置对话框的默认目录
if ( IDOK == _dlgFileDlg.DoModal() )
{
for( POSITION posPos = _dlgFileDlg.GetStartPosition() ; posPos ; vecFilesPath.push_back(_dlgFileDlg.GetNextPathName(posPos)) );
return true;
}
return false;
}
//实例
void Main()
{
CString _csFilesPath(_T(""));
if ( !FilesSelect(_csFilesPath) )
return;
std::vector vecFilesPath;
if ( !FilesSelect(vecFilesPath) )
return;
}
路径选择对话框实现代码:
bool PathSelect( CString &csFilePath )
{
BROWSEINFO bi; //BROWSEINFO结构体
TCHAR Buffer[512]= _T("");
TCHAR FullPath[512]= _T("");
bi.hwndOwner = NULL; //m_hWnd你的程序主窗口
bi.pidlRoot = NULL;
bi.pszDisplayName = Buffer; //返回选择的目录名的缓冲区
bi.lpszTitle = _T("Selection"); //弹出的窗口的文字提示
bi.ulFlags = BIF_RETURNONLYFSDIRS; //只返回目录。其他标志看MSDN
bi.lpfn = NULL; //回调函数,有时很有用
bi.lParam = 0;
bi.iImage = 0;
ITEMIDLIST* pidl = ::SHBrowseForFolder (&bi); //显示弹出窗口,ITEMIDLIST很重要
if(::SHGetPathFromIDList (pidl,FullPath)) //在ITEMIDLIST中得到目录名的整个路径
{
csFilePath = FullPath;
return true;
}
return false;
}
//实例
void Main()
{
// TODO: 在此添加控件通知处理程序代码
CString _csFilesPath(_T(""));
if ( !PathSelect(_csFilesPath) )
return;
}