東莞哪里的網(wǎng)站建設(shè)效果好注冊(cè)網(wǎng)站免費(fèi)注冊(cè)
CFileDialog類
CFileDialog封裝用于文件打開(kāi)操作或文件保存操作的常見(jiàn)對(duì)話框。信息來(lái)源自Windows官方文檔:https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cfiledialog-class?view=msvc-170
這里重點(diǎn)介紹幾個(gè)常用的函數(shù)功能:
構(gòu)造函數(shù)
explicit CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt = NULL,LPCTSTR lpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter = NULL,CWnd* pParentWnd = NULL,DWORD dwSize = 0,BOOL bVistaStyle = TRUE);
參數(shù):
1.bOpenFileDialog
[in] 參數(shù),指定要?jiǎng)?chuàng)建的對(duì)話框類型。 將其設(shè)置為 TRUE 可構(gòu)造“文件 > 打開(kāi)”對(duì)話框。 將其設(shè)置為 FALSE 可構(gòu)造“文件 > 另存為”對(duì)話框。
2.lpszDefExt
[in] 默認(rèn)的文件擴(kuò)展名。 如果用戶不包含已知擴(kuò)展名 (在文件名框中) 用戶計(jì)算機(jī)上具有關(guān)聯(lián)的擴(kuò)展, 則 lpszDefExt 指定的擴(kuò)展名會(huì)自動(dòng)追加到文件名中。 如果此參數(shù)為 NULL,則不會(huì)追加任何擴(kuò)展名。
3.lpszFileName
[in] “文件名”框中顯示的初始文件名。 如果為 NULL,則不會(huì)顯示初始文件名。
4.dwFlags
[in] 一個(gè)或多個(gè)標(biāo)志的組合,可用于自定義對(duì)話框。 有關(guān)這些標(biāo)志的說(shuō)明,請(qǐng)參閱 Windows SDK 中的 OPENFILENAME 結(jié)構(gòu)。 如果修改 m_ofn.Flags 結(jié)構(gòu)成員,請(qǐng)?jiān)诟闹惺褂冒次换蜻\(yùn)算符以保持默認(rèn)行為不變。
5.lpszFilter
[in] 一系列字符串對(duì),用于指定可應(yīng)用于文件的篩選器。 如果指定文件篩選器,則只有與篩選條件匹配的文件才會(huì)顯示在“文件”列表中。 請(qǐng)參閱“注解”部分,詳細(xì)了解如何使用文件篩選器。
6.pParentWnd
[in] 一個(gè)指針,指向文件對(duì)話框的父窗口或所有者窗口。
7.dwSize
[in] OPENFILENAME 結(jié)構(gòu)的大小。 此值取決于操作系統(tǒng)版本。 MFC 使用了此參數(shù)來(lái)確定要?jiǎng)?chuàng)建的相應(yīng)對(duì)話框類型。 默認(rèn)大小為 0 表示 MFC 代碼將根據(jù)運(yùn)行程序的操作系統(tǒng)版本確定要使用的正確的對(duì)話框大小。
8.bVistaStyle
[in] 注意 此參數(shù)在 Visual Studio 2008 及更高版本中可用,因此,僅當(dāng)你在 Windows Vista 或更高版本中運(yùn)行時(shí),才使用新樣式對(duì)話框。
指定文件對(duì)話框樣式的參數(shù)。 將其設(shè)置為 TRUE 可使用新 Vista 樣式文件對(duì)話框。 否則將使用舊樣式的對(duì)話框。 請(qǐng)參閱“注解”部分,詳細(xì)了解如何在 Vista 下運(yùn)行。
顯示函數(shù)
virtual INT_PTR DoModal();
返回值:
IDOK 或 IDCANCEL。 如果返回 IDCANCEL,請(qǐng)調(diào)用 Windows CommDlgExtendedError 函數(shù)以確定是否發(fā)生了錯(cuò)誤。
IDOK 和 IDCANCEL 是常量,指示用戶選擇了“確定”按鈕還是“取消”按鈕。
返回的INT_PTR是常量,要么是IDOK,要么是IDCANCEL。如果有選中文件,那么就是IDOK,沒(méi)有選中文件無(wú)法定義IDOK。
獲取路徑名、文件名等信息
if (result == IDOK)//如果有選中文件,那么result就是IDOK
{CString pathName, fileName, titleName, extName;pathName = openDlg.GetPathName();//得到完整的文件名,包括目錄名和擴(kuò)展名如:c:/test/test1.txtfileName = openDlg.GetFileName();//得到完整的文件名,包括擴(kuò)展名如:test1.txttitleName = openDlg.GetFileTitle();//得到完整的文件名,不包括目錄名和擴(kuò)展名如:test1extName = openDlg.GetFileExt();// 得到完整的文件擴(kuò)展名,如:txtMessageBox(pathName + "\r" + fileName + "\r" + titleName + "\r" + extName);//通過(guò)顯示,注意幾者區(qū)別
}
如此便成功將選擇文件夾信息提取稱為了CString。
實(shí)戰(zhàn)案例
void CMFCCSVSENDDlg::OnBnClickedOpen()
{// TODO: 在此添加控件通知處理程序代碼CFileDialog openDlg(TRUE,_T("CLS File(*.csv)|*.csv"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("CLS File(*.csv)|*.csv||"),this);INT_PTR result = openDlg.DoModal();//以模態(tài)方式創(chuàng)建打開(kāi)文件對(duì)話框if (result == IDOK)//如果有選中文件,那么result就是IDOK{CString pathName, fileName, titleName, extName;pathName = openDlg.GetPathName();//得到完整的文件名,包括目錄名和擴(kuò)展名如:c:/test/test1.txtfileName = openDlg.GetFileName();//得到完整的文件名,包括擴(kuò)展名如:test1.txttitleName = openDlg.GetFileTitle();//得到完整的文件名,不包括目錄名和擴(kuò)展名如:test1extName = openDlg.GetFileExt();// 得到完整的文件擴(kuò)展名,如:txtMessageBox(pathName + "\r" + fileName + "\r" + titleName + "\r" + extName);//通過(guò)顯示,注意幾者區(qū)別}
}
效果:
注意:
1.很多時(shí)候我們只需要路徑和文件名就可以了,所以沒(méi)有必要非得在串口類里加CFileDialog類。
2.所謂保存,其實(shí)也不是CFileDialog存的,這個(gè)類確定了一個(gè)位置和文件后,需要你手動(dòng)添加代碼實(shí)現(xiàn)才行。