MFC的界面中,需要實現這樣兩個功能:
1、在界面上加一個按鈕,單擊按鈕彈出一個對話框選擇文件,在工程中獲得文件的路徑;
2、在界面上加一個按鈕,單擊按鈕彈出一個對話框選擇文件夾,在工程中獲取文件夾的路徑。
一、獲取文件路徑
1 // -- 按鈕的消息響應函數 2 void CDialogSampled::OnBnClickedButtonOpen() 3 { 4 // TODO: 在此添加控件通知處理程序代碼 5 CString m_strFilePath = _T(""); 6 7 //獲取文件路徑名 8 LPCTSTR szFilter =_T("TXT(*.txt)|*.txt|LOG(*.log)|*.log|ALLSUPORTFILE(*.*)|*.*||"); 9 CFileDialog dlgFileOpenImg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL); 10 //打開txt文件 11 if(dlgFileOpenImg.DoModal() == IDOK) 12 { 13 //讀取文件名 14 m_strFilePath = dlgFileOpenImg.GetPathName(); 15 } 16 else 17 { 18 return; 19 } 20 }
二、獲取文件夾路徑
//選擇保存路徑 void CDialogSampled::OnBnClickedButtonSavePathSelect() { // TODO: 在此添加控件通知處理程序代碼 CString m_saveFilePath; //打開文件,獲取文件路徑名 TCHAR szPath[_MAX_PATH]; BROWSEINFO bi; bi.hwndOwner = GetSafeHwnd(); bi.pidlRoot = NULL; bi.lpszTitle = "Please select the input path"; bi.pszDisplayName = szPath; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = NULL; LPITEMIDLIST pItemIDList = SHBrowseForFolder(&bi); if(pItemIDList) { if(SHGetPathFromIDList(pItemIDList,szPath)) { m_saveFilePath = szPath; m_saveFilePath = m_saveFilePath+"\\"; } //use IMalloc interface for avoiding memory leak IMalloc* pMalloc; if( SHGetMalloc(&pMalloc) != NOERROR ) { TRACE(_T("Can't get the IMalloc interface\n")); } pMalloc->Free(pItemIDList); if(pMalloc) pMalloc->Release(); UpdateData(FALSE); } }
