檔案夾選擇對話框的使用
一. 示例代碼
CString iDir;
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = m_Dir.GetBuffer(512);
bi.lpszTitle = _T("選擇儲存的檔案夾");
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
ITEMIDLIST* pidl = ::SHBrowseForFolder(&bi);
if (::SHGetPathFromIDList(pidl, m_Dir.GetBuffer(512)))
m_Dir.ReleaseBuffer();
二. ROWSEINFO結構說明
hwndOwner: 對話框的所有者
pidlRoot: 從何根路徑開始展開檔案夾,預設情況下從“桌面”開始展開.
pszDisplayName: 指向一個緩存,該緩存傳回使用者選中的檔案夾的顯示名稱,
緩存的大小設定為MAX_PATH
lpszTitle: 對話框上的treeview控件上方顯示的标題, 并不是對話框的标題
ulFlags: 顯示标志控制項.
BIF_RETURNONLYFSDIRS, 隻有當使用者選中的是檔案夾時"确定"按鈕才有效
BIF_BROWSEFORCOMPUTER, 隻有選中"我的電腦"時"确定"按鈕才有效
BIF_EDITBOX, 在對話框上顯示一個Edit,允許使用者輸入選中項的名稱
BIF_STATUSTEXT, 界面上包含一塊statu區域, 回調函數通過向對話框發送
BFFM_SETSTATUSTEXT消息設定靜态文本
BIF_VALIDATE, 當使用者在Edit中輸入不正确的名字時,向對話框發送
BFFM_VALIDATEFAILED消息,并調用對話框的回調函數處理該消息
lpfn 設定處理對話框事件的回調函數
lParam 對話框傳遞給回調函數的參數
iImage 傳回與選中檔案夾關聯的圖檔的index , 該index是圖檔在系統ImageList中的index值.
三. SHBrowseForFolder函數
view plaincopy to clipboardprint?
LPITEMIDLIST WINAPI SHBrowseForFolder(
LPBROWSEINFO lpbi
);
該函數顯示檔案夾選擇對話框, 并允許使用者選擇檔案夾.傳回值是指向一個ITEMIDLIST結構的指針, 該結構指定根目錄下使用者選中的檔案夾. 如果在對話框上使用者選擇的 "取消"按鈕, 則傳回NULL四. SHGetPathFromIDList函數
四. SHGetPathFromIDList函數
WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(
LPCITEMIDLIST pidl,
LPSTR pszPath
);
該函數将ITEMIDLIST結構轉換為檔案系統路徑.
pidl是待轉換的ITEMIDLIST的指針
pszPath是轉換後傳回的字元串, 該字元串的最大長度為PATH_MAX
如果轉換成功傳回TRUE, 否則為FALSE
本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/ShardowM/archive/2008/06/06/2516213.aspx