xref: /MusicPlayer2/MusicPlayer2/TreeCtrlEx.h (revision 26cefa3ce191eaff4754c23aa55c7bab36bd518b)
1 #pragma once
2 #include "ColorConvert.h"
3 
4 
5 // CTreeCtrlEx
6 
7 //注:此类通过自绘设置了文本及选中项的背景颜色,CTreeCtrl::SetTextColor 将不再起作用,
8 //但你仍然可以使用 CTreeCtrl::SetBkColor 设置背景颜色
9 
10 class CTreeCtrlEx : public CTreeCtrl
11 {
12 	DECLARE_DYNAMIC(CTreeCtrlEx)
13 
14 public:
15 	CTreeCtrlEx();
16 	virtual ~CTreeCtrlEx();
17 
18 public:
19     void InsertPath(CString path, HTREEITEM hRoot);
20 
21     //向树中插入一个文件夹结构
22     //path: 文件夹的根目录
23     //hRoot: 要插入的根目录在树控件中的位置
24     //is_path_show: 一个函数对象,用于判断一个文件夹是否需要显示
25     void InsertPath(CString path, HTREEITEM hRoot, std::function<bool(const CString&)> is_path_show);
26     CString GetItemPath(HTREEITEM hItem);
27 
28     bool IsItemExpand(HTREEITEM hItem);
29     void ExpandAll(HTREEITEM hItem);        //展开指定节点下的所有节点
30     void ExpandAll();                       //展开所有节点
31     void IterateItems(HTREEITEM hRoot, std::function<void(HTREEITEM)> func);           //遍历指定节点下的所有节点
32 
33     void SaveExpandState();                 //保存所有节点的展开收缩状态
34     void SaveItemExpandState(HTREEITEM hItem, bool expand);     //保存指定节点的展开收缩状态
35     void RestoreExpandState();              //恢复所有节点的展开收缩状态
36 
37 protected:
38     static std::map<CString, bool> m_expand_state;       //保存每个节点的展开收起状态
39     const ColorTable& m_theme_color;
40 
41 private:
42     void _InsertPath(CString path, HTREEITEM hRoot, std::function<bool(const CString&)> is_path_show = [](const CString&) {return true; });
43 
44 protected:
45 	DECLARE_MESSAGE_MAP()
46     virtual void PreSubclassWindow();
47 public:
48     afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
49 };
50 
51 
52