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