场景
- 选择单一文件
技术点
- 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