第二个参数为nullptr时,则用户必须要输入文件扩展名,否则GetFileExt等方法将返回一个空字符串:
CString strFilterBwdp = _T("bwdp文件(bwdp)|*.bwdp|");
CString strFilterPjte = _T("pjte文件(pjte)|*.pjte|");
CString strFileFilter = strFilterBwdp + strFilterPjte;
CFileDialog fileDlg(FALSE, NULL, prjParameter.GetProjectName() + L"造价接口文件", OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT, strFileFilter, NULL);
CString strExt = fileDlg.GetFileExt(); // 获取为空
第二个参数默认扩展名与选择扩展名不同,或者默认的扩展名不在过滤器中,则GetFileExt等方法将返回过滤器第一个扩展名:
CString strFilterBwdp = _T("bwdp文件(*.bwdp)|*.bwdp|");
CString strFilterPjte = _T("pjte文件(*.pjte)|*.pjte|");
CString strFileFilter = strFilterBwdp + strFilterPjte;
CFileDialog fileDlg(FALSE, L"pjte", prjParameter.GetProjectName() + L"造价接口文件", OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT, strFileFilter, NULL);
CString strExt = fileDlg.GetFileExt(); // 忽略默认扩展名,返回过滤器第一个扩展名
1、对于扩展名,以用户输入的扩展名为准,这个权重最高。
2、第二个参数nullptr时用户必须输入扩展名,对话框不会根据过滤器自动追加扩展名。
3、第二个参数只对"."过滤器才有意义。
所以如果我们需要根据过滤器自动追加扩展名的话,一般将第二个参数设置为空字符串L"",而不是nullptr即可。