文件选择对话框、路径选择对话框的函数实现

本文介绍了如何使用CFileDialog实现文件选择对话框及路径选择对话框,并通过实例展示了其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中,我们有时需要对一些文件进行处理。这时,我们需让用户从资源管理器中选择这些文件。函数的功能是实现弹出文件选择对话框,并获取用户选择的文件。


文件选择对话框实现代码:

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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值