MFC總結(10) ---- MFC中CFileDialog 實現瀏覽檔案和瀏覽目錄功能
阿新 • • 發佈:2019-02-04
CFileDialog檔案選擇對話方塊的使用:首先構造一個物件並提供相應的引數,建構函式原型如下:
CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );引數意義如下:
bOpenFileDialog 為TRUE則顯示開啟對話方塊,為FALSE則顯示儲存對話檔案對話方塊。 lpszDefExt 指定預設的副檔名。 lpszFileName 指定預設的檔名。 dwFlags 指明一些特定風格。 lpszFilter 是最重要的一個引數,它指明可供選擇的檔案型別和相應的副檔名。 pParentWnd 為父視窗指標。
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 CString CFileDialog::GetExtName( ) 得到完整的副檔名,如:txt CString CFileDialog::GetFileTitle ( ) 得到完整的檔名,不包括目錄名和副檔名如:test1 POSITION CFileDialog::GetStartPosition( ) 對於選擇了多個檔案的情況得到第一個檔案位置。 CString CFileDialog::GetNextPathName( POSITION& pos ) 對於選擇了多個檔案的情況得到下一個檔案位置,並同時返回當前檔名。但必須已經呼叫過POSITION CFileDialog::GetStartPosition( )來得到最初的POSITION變數。
實現檔案瀏覽功能
void CRunAddDlg::OnBnClickedButton1() { // TODO: 在此新增控制元件通知處理程式程式碼 // 設定過濾器 TCHAR szFilter[] = _T("啟動檔案(*.exe)|*.exe|所有檔案(*.*)|*.*||"); // 構造開啟檔案對話方塊 CFileDialog fileDlg(TRUE, _T("exe"), NULL, 0, szFilter, this); CString strFilePath; CString strFileName; // 顯示開啟檔案對話方塊 if (IDOK == fileDlg.DoModal()) { // 如果點選了檔案對話方塊上的“開啟”按鈕,則將選擇的檔案路徑顯示到編輯框裡 strFilePath = fileDlg.GetPathName(); strFileName = fileDlg.GetFileTitle(); SetDlgItemText(IDC_RUNEXE_PATH_EDIT1, strFilePath); SetDlgItemText(IDC_RUNADD_NAME_EDIT2, strFileName); } }
瀏覽目錄,並獲取目錄路徑
void CRubbishDlg::OnGetBrowseBtn()
{
strFilePath = _T("");
BROWSEINFO bi;
WCHAR Buffer[512];
//初始化入口引數bi開始
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = Buffer;//此引數如為NULL則不能顯示對話方塊
bi.lpszTitle = L"選擇路徑";
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.iImage = 0;
//初始化入口引數bi結束
LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//呼叫顯示選擇對話方塊
if (pIDList)//選擇到路徑(即:點了確定按鈕)
{
SHGetPathFromIDList(pIDList, Buffer);
//取得資料夾路徑到Buffer裡
strFilePath = Buffer;//將路徑儲存在一個CString物件裡
m_pathEdit.SetWindowText(strFilePath); //顯示到edit Control對話方塊中
}
else{ return; <span style="white-space: pre;"> </span>//取消選擇} }