第二個參數爲nullptr時,則用戶必須要輸入文件擴展名,否則GetFileExt等方法將返回一個空字符串
CFileDialog dialog(FALSE, nullptr, nullptr, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"JPG|*.jpg|PNG|*.png|BMP|*.bmp||");
dialog.DoModal();
const auto ext = dialog.GetFileExt(); // 空字符串
默認擴展名與選擇擴展名不同
CFileDialog dialog(FALSE, L"png", nullptr, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"JPG|*.jpg|PNG|*.png|BMP|*.bmp||");
dialog.DoModal();
const auto ext = dialog.GetFileExt(); // 忽略默認擴展名,默認返回過濾器第一個擴展名jpg
默認擴展名不在過濾器中
CFileDialog dialog(FALSE, L"exe", nullptr, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"JPG|*.jpg|PNG|*.png|BMP|*.bmp||");
dialog.DoModal();
const auto ext = dialog.GetFileExt(); // 忽略默認擴展名,默認返回過濾器第一個擴展名jpg
如果過濾器有多個擴展名,默認返回第一個
CFileDialog dialog(FALSE, L"exe", nullptr, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"JPG|*.jpg;*.*|PNG|*.png|BMP|*.bmp||");
dialog.DoModal();
const auto ext = dialog.GetFileExt(); // 還是jpg
默認擴展名只對*.*過濾器有意義
CFileDialog dialog(FALSE, L"exe", nullptr, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"ALL|*.*|PNG|*.png|BMP|*.bmp||");
dialog.DoModal();
const auto ext = dialog.GetFileExt(); // 返回exe
總結以下幾點:
1、對於擴展名,以用戶輸入的擴展名爲準,這個權重最高。
2、第二個參數nullptr時用戶必須輸入擴展名,對話框不會根據過濾器自動追加擴展名。
3、第二個參數只對"*.*"過濾器纔有意義。
所以如果我們需要根據過濾器自動追加擴展名的話,一般將第二個參數設置爲空字符串L"",而不是nullptr即可。