參考:徐景周的三態樹的實現
在選擇目錄時,可以使用系統提供的Shell函數SHBrowseForFolder,這個函數功能比 較強大,在一般情況下使用它基本上能夠滿足要求,但是,這個函數也有一個缺陷,就是不能選擇多個目錄,每次只能返回一個選擇的目錄。可是在實際的工作中,需要 一次返回多個選擇的目錄。我一開始琢磨著用CFileDialog來實現,可是後來發現無 法實現我要的功能。於是乎就采取了一種比較“笨”的辦法,用三態樹實現多目錄選 擇。參考了徐景洲的三態樹的實現和其他一些關於CTreeCtrl控件顯示目錄的代碼後,就動手寫了這個工程。原本不敢拿出來獻丑,可以發現很多網友問多選目錄的問題,而 又沒有比較好的解決方案,於是就拿出來獻獻丑了。
以下就為將CFolderTreeCtrl類添加到工程中的步驟:
1、生成一個新的對話框工程;
2、將FolderTreeCtrl.h,FolderTreeCtrl.cpp文件添加到工程中;
3、將STATEBMP.BMP,folderbmp.bmp文件添加到工程資源中,並設定資源ID。這裡
設置如下folderbmp.bmp -> IDB_BITMAP_LIST
STATEBMP.BMP -> IDB_BITMAP_STATE;
4、定義CTreeCtrl控件為我們的類型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、編譯,運行,便可以得到一個多目錄選擇的對話框了。
具體的實現可以參考工程代碼。
本文配套源碼