场景

  • 选择单一文件

技术点

  • CFileDialog
CFileDialog::CFileDialog(
    BOOL bOpenFileDialog, 
    LPCTSTR lpszDefExt = NULL, 
    LPCTSTR lpszFileName = NULL, 
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
    
参数意义如下:

bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。

lpszDefExt 指定默认的文件扩展名。

lpszFileName 指定默认的文件名。

dwFlags 指明一些特定风格。

lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:
 
_T("Image Files(*.jpg;*.png;*.bmp)|*.jpg;*.png;*.bmp|All Files (*.*)|*.*||")


文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

代码

void CMFCClistDlg::GUI_Add_Check_Dir()
{
    CFileDialog dlg(TRUE, _T("*.txt"),
		NULL, 
		OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST,
		_T("conf Files(*.ini;*.txt)|*.ini;*.txt|All Files (*.*)|*.*||"),
		NULL);
	dlg.m_ofn.lpstrTitle = _T("选择字典");
	CString filename;
	vector<CString> vecFilePaths;
	if (dlg.DoModal() == IDOK)
	{
		POSITION fileNamesPosition = dlg.GetStartPosition();
		while (fileNamesPosition != NULL)
		{


			// filename 是获取得文件名
			filename = dlg.GetNextPathName(fileNamesPosition);
			vecFilePaths.push_back(filename);
		}
	}
	// 计算文件路径是否为空,如果为空就是没有选择文件
	int count = vecFilePaths.size();
	if (count == 0)
		MessageBox(_T("没有选择文件"), NULL, MB_OK | MB_ICONQUESTION);



	// 把变量内容更新到对话框
	UpdateData(FALSE);
}

参考

MFC 中CFileDialog的用法

https://blog.csdn.net/liuwumiyuhuiping/article/details/7348591

相关文章: