打開/保存文件對話框:
CFileDialog::CFileDialog(BOOL bOpenFileDialog, //為TRUE則顯示打開對話框,為FALSE則顯示保存對話文件對話框LPCTSTR lpszDefExt = NULL, //默認的文件擴展名LPCTSTR lpszFileName = NULL, //默認的文件名DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //設定風格LPCTSTR lpszFilter = NULL, //列出可供選擇的文件類型和相應的擴展名CWnd* pParentWnd = NULL //父窗口句柄指針 );
(1)打開文件對話框
static TCHAR szFilter[] =_T("Info Files (*.csv)|*.csv|")_T("Info Files (*.txt)|*.txt|")_T("Info Files (*.csv;*.txt)|*.csv;*.txt|");CFileDialog hFileDlg(TRUE,NULL,NULL, OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST, szFilter, NULL); if(hFileDlg.DoModal() == IDOK) {m_path = hFileDlg.GetPathName();UpdateData(FALSE); }
LPCTSTR lpszFilter 參數格式如:"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc;*.xls|All Files (*.*)|*.*||";文件類型說明和擴展名間用 | 分隔,同種類型文件的擴展名間可以用 ; 分割,每種文件類型間用 | 分隔,末尾用 || 指明。
創建文件對話框可以使用DoModal(),在返回后可以利用下面的函數得到用戶選擇:
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目錄名和擴展名如:c:/test/test1.txt
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括擴展名如:test1.txt
?
// 單個穩健獲取路徑
GetPathName()
// 多個文件獲取
POSITION pos = dlg.GetStartPosition();
while(pos != NULL)
{
m_path = dlg.GetNextPathName(pos);
}
?
(2)保存文件對話框
把第一個參數設置為FALSE即可,其他與(1)類似。
?
(3)選擇文件夾對話框
?
CString strPath;TCHAR szDir[MAX_PATH];BROWSEINFO bi; bi.hwndOwner = this->m_hWnd;bi.pidlRoot = NULL;bi.pszDisplayName = szDir; // 此參數如為NULL則不能顯示對話框bi.lpszTitle = _T("請選擇目錄");bi.ulFlags = BIF_STATUSTEXT | BIF_USENEWUI | BIF_RETURNONLYFSDIRS;bi.lpfn = NULL;bi.lParam = 0;bi.iImage = 0;ITEMIDLIST *pidl = SHBrowseForFolder(&bi); // 調用顯示選擇對話框if(pidl == NULL){return;}// 取得文件夾路徑到Buffer里if(!SHGetPathFromIDList(pidl,szDir)){return;}else{strPath = szDir; // 保存為CString}
?