MFC文件對話框CFileDialog自動追加擴展名

第二個參數爲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即可。

發佈了96 篇原創文章 · 獲贊 187 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章