首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 資料夾瀏覽對話框啟用新版 UI (BIF_USENEWUI) 完整範例

     編輯:VC 教學

背景

舊版 `SHBrowseForFolder` 僅提供簡陋樹狀視圖,無法新建資料夾。Shell 版本 5.0+ (Win2000 以上) 支援 `BIF_USENEWUI` 旗標,啟用類似檔案總管的現代化介面,含新建資料夾按鈕、右鍵選單、地址列等。

核心代碼


void CTestBrowseDlg::OnBrowse()
{
    BROWSEINFO bi = {0};
    TCHAR szPath[MAX_PATH] = {0};

    bi.hwndOwner = GetSafeHwnd();
    bi.pszDisplayName = szPath;
    bi.lpszTitle = _T("請選擇資料夾");
    bi.ulFlags = BIF_USENEWUI | BIF_RETURNONLYFSDIRS; // 關鍵旗標

    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
    if (!pidl) return;

    if (SHGetPathFromIDList(pidl, szPath)) {
        CString str = szPath;
        if (!str.IsEmpty() && str.Right(1) != _T("\\")) str += _T("\\");
        m_Path = str; // 綁定到編輯框
        UpdateData(FALSE);
    }

    // 釋放 PIDL 記憶體 (需包含  並連結 shell32.lib)
    IMalloc* pMalloc = NULL;
    if (SUCCEEDED(SHGetMalloc(&pMalloc))) {
        pMalloc->Free(pidl);
        pMalloc->Release();
    }
}

旗標組合建議

旗標用途
BIF_USENEWUI啟用新版 UI (含新建資料夾、右鍵選單)
BIF_RETURNONLYFSDIRS僅回傳檔案系統資料夾,排除虛擬資料夾
BIF_NEWDIALOGSTYLE調整對話框尺寸可拖曳 (Vista+)
BIF_BROWSEINCLUDEFILES允許選取檔案 (非資料夾)

進階:自訂回呼函數

設定 `bi.lpfn = BrowseCallbackProc` 可在對話框初始化、選擇變更時自訂行為(如設定預設路徑、過濾特定資料夾)。

常見問題

  • 未包含 `` 或未連結 `shell32.lib` → 連結錯誤。
  • 忘記 `SHGetMalloc/Free` 釋放 `pidl` → 記憶體洩漏。
  • XP 以下系統無 `BIF_USENEWUI` 支援 → 需自行實作新建資料夾按鈕 (Hook 對話框)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved