1.獲取文件的路徑
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle=L"打開文件";
//fileDlg.m_ofn.lpstrFilter=_T("Program(*.exe)\0*.exe\0All Files(*.*)\0*.*\0\0");
if(IDOK==fileDlg.DoModal())
{
LPWSTR lpPathName = fileDlg.m_ofn.lpstrFile;
SetDlgItemText(IDC_EDIT_SERV_PATH,lpPathName);
}
2.獲取文件夾的路徑
(1)BROWSEINFO結構
●定義
typedef struct_browseinfo
{
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
●成員變量
hwndOwner:瀏覽文件夾對話框的父窗體句柄。
pidlRoot:ITEMIDLIST結構的地址,包含瀏覽時的初始根目錄,而且只有被指定的目錄和其子目錄才顯示在瀏覽文件夾對話框中。該成員變量可以是NULL,在此時桌面目錄將被使用。
pszDisplayName:用來保存用戶選中的目錄字符串的內存地址。該緩沖區的大小缺省是定義的MAX_PATH常量宏。
lpszTitle:該瀏覽文件夾對話框的顯示文本,用來提示該瀏覽文件夾對話框的功能、作用和目的。
ulFlags:該標志位描述了對話框的選項。它可以為0,也可以是以下常量的任意組合:
BIF_BROWSEFORCOMPUTER:返回計算機名。除非用戶選中瀏覽器中的一個計算機名,否則該對話框中的“OK”按鈕為灰色。
BIF_BROWSEFORPRINTER:返回打印機名。除非選中一個打印機名,否則“OK”按鈕為灰色。
BIF_BROWSEINCLUDEFILES:瀏覽器將顯示目錄,同時也顯示文件。
BIF_DONTGOBELOWDOMAIN:在樹形視窗中,不包含域名底下的網絡目錄結構。
BIF_EDITBOX:瀏覽對話框中包含一個編輯框,在該編輯框中用戶可以輸入選中項的名字。
BIF_RETURNFSANCESTORS:返回文件系統的一個節點。僅僅當選中的是有意義的節點時,“OK”按鈕才可以使用。
BIF_RETURNONLYFSDIRS:僅僅返回文件系統的目錄。例如:在瀏覽文件夾對話框中,當選中任意一個目錄時,該“OK”按鈕可用,而當選中“我的電腦”或“網上鄰居”等非有意義的節點時,“OK”按鈕為灰色。
BIF_STATUSTEXT:在對話框中包含一個狀態區域。通過給對話框發送消息使回調函數設置狀態文本。
BIF_VALIDATE:當沒有BIF_EDITBOX標志位時,該標志位被忽略。如果用戶在編輯框中輸入的名字非法,瀏覽對話框將發送BFFM_VALIDATEFAILED消息給回調函數。
iImage:與選中目錄相關的圖像。該圖像將被指定為系統圖像列表中的索引值。
代碼實例:
CString m_strFileOut = _T("");
TCHAR servPath[MAX_PATH];//用來存放文件夾路徑
BROWSEINFO bi;
LPITEMIDLIST pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = servPath;
bi.lpszTitle = _T("選擇輸出文件路徑");
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = NULL;
bi.iImage = NULL;
if((pidl = SHBrowseForFolder(&bi)) != NULL)
{
if(SUCCEEDED(SHGetPathFromIDList(pidl, servPath))) //得到文件夾的全路徑,不要的話,只得本文件夾名
{
SetDlgItemText(IDC_EDIT_SERV_PATH,servPath);
}
}
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
