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

使用三態樹狀結構實作多重目錄選取

     編輯:關於VC++

前言

多目錄選取示意圖

在選取目錄時,常使用 Shell 函數 SHBrowseForFolder,功能強大但有個缺點:無法一次選取多個目錄,每次僅能回傳單一選取路徑。實務上常需一次選取多個目錄,嘗試用 CFileDialog 卻無法達成。因此參考徐景洲的三態樹實作與 CTreeCtrl 顯示目錄的程式碼,開發出此多目錄選取方案。

將 CFolderTreeCtrl 加入專案步驟

步驟 1:建立對話方塊專案

建立新的對話方塊型應用程式專案。

步驟 2:加入類別檔案

將 FolderTreeCtrl.h、FolderTreeCtrl.cpp 加入專案。

步驟 3:匯入點陣圖資源

  • folderbmp.bmp → IDB_BITMAP_LIST
  • STATEBMP.BMP → IDB_BITMAP_STATE

步驟 4:宣告樹狀控制項

CFolderTreeCtrl m_tree;

步驟 5:初始化程式碼

BOOL CMultiFolderDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    ......
    
    m_imgState.Create(IDB_BITMAP_STATE, 13, 1, RGB(255,255,255));
    m_imgList.Create(IDB_BITMAP_LIST, 16, 1, RGB(255,255,255));
    
    m_tree.SetImageList(&m_imgList, TVSIL_NORMAL);
    m_tree.SetImageList(&m_imgState, TVSIL_STATE);
    
    m_tree.DisplayTree(NULL, FALSE);
    
    return TRUE;
}

步驟 6:編譯執行

即可獲得一個支援多目錄選取的對話方塊。

實作細節

具體實作請參考專案原始碼。核心概念為使用三態核取方塊 (未選/部分選/全選) 狀態,配合遞迴遍歷目錄結構,實現父子節點選取狀態的自動同步。

參考資料

徐景洲的三態樹實作

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved