SimpleWindow
载入中...
搜索中...
未找到
TreeView.h
1#include "ImageList.h"
2#include "ItemsControl.h"
3#include <CommCtrl.h>
4
5namespace sw
6{
10 enum class TreeViewImageList {
11 Normal = TVSIL_NORMAL, // 普通图像列表
12 State = TVSIL_STATE, // 状态映像列表
13 };
14
18 class TreeViewNode : public IToString<TreeViewNode>,
19 public IEqualityComparable<TreeViewNode>
20 {
21 private:
25 HWND _hwnd;
26
30 HTREEITEM _hitem;
31
32 public:
36 TreeViewNode() = default;
37
41 TreeViewNode(HWND hwnd, HTREEITEM hitem);
42
46 HWND GetOwnerHandle() const;
47
51 HTREEITEM GetHandle() const;
52
56 std::wstring ToString() const;
57
61 bool Equals(const TreeViewNode &other) const;
62
66 bool IsNull() const;
67
71 operator bool() const;
72
76 std::wstring GetText() const;
77
82 bool SetText(const std::wstring &text);
83
89
95
101
107
112 TreeViewNode InsertAfter(const std::wstring &text);
113
118 TreeViewNode AddChild(const std::wstring &text);
119
124 bool IsSelected() const;
125
130 bool Select();
131
136 bool Delete();
137
142 bool IsExpanded() const;
143
148 bool SetExpand(bool expand);
149
154 bool Expand();
155
160 bool Collapse();
161
165 void *GetUserData() const;
166
171 bool SetUserData(void *data);
172
177 bool IsChecked() const;
178
182 void SetCheck(bool check);
183
188 bool SetImages(int imageIndex, int selectedImageIndex);
189
193 int GetChildCount() const;
194
200 };
201
202 // clang-format off
203
207 struct TreeViewItemExpandingEventArgs : TypedRoutedEventArgs<TreeView_ItemExpanding> {
208 bool cancel = false; // 是否取消本次展开或折叠操作
209 bool action; // true表示展开,false表示折叠
210 TreeViewNode node; // 正在展开或折叠的节点
211 TreeViewItemExpandingEventArgs(bool action, const TreeViewNode &node): action(action), node(node) {}
212 };
213
217 struct TreeViewItemExpandedEventArgs : TypedRoutedEventArgs<TreeView_ItemExpanding> {
218 bool action; // true表示展开,false表示折叠
219 TreeViewNode node; // 正在展开或折叠的节点
220 TreeViewItemExpandedEventArgs(bool action, const TreeViewNode &node): action(action), node(node) {}
221 };
222
226 struct TreeViewCheckStateChangedEventArgs : TypedRoutedEventArgs<TreeView_CheckStateChanged> {
227 int checkState; // 复选框的新状态,0表示未选中,1表示选中,-1表示无复选框
228 TreeViewNode node; // 复选框状态改变的节点
229 TreeViewCheckStateChangedEventArgs(int checkState, const TreeViewNode &node): checkState(checkState), node(node) {}
230 };
231
232 // clang-format on
233
237 class TreeView : public ItemsControl<TreeViewNode>
238 {
239 private:
244
245 public:
250
255
260
265
270
271 public:
276
277 protected:
281 virtual int GetItemsCount() override;
282
286 virtual int GetSelectedIndex() override;
287
291 virtual void SetSelectedIndex(int index) override;
292
296 virtual TreeViewNode GetSelectedItem() override;
297
303 virtual void SetBackColor(Color color, bool redraw) override;
304
310 virtual void SetTextColor(Color color, bool redraw) override;
311
318 virtual bool OnNotified(NMHDR *pNMHDR, LRESULT &result) override;
319
326 virtual bool OnClicked(NMHDR *pNMHDR, LRESULT &result);
327
334 virtual bool OnDoubleClicked(NMHDR *pNMHDR, LRESULT &result);
335
340 virtual void OnGetDispInfo(NMTVDISPINFOW *pNMInfo);
341
347 virtual bool OnItemExpanding(NMTREEVIEWW *pNMTV);
348
353 virtual void OnItemExpanded(NMTREEVIEWW *pNMTV);
354
359 virtual void OnItemChanged(NMTVITEMCHANGE *pNMInfo);
360
361 public:
365 virtual void Clear() override;
366
371 virtual TreeViewNode GetItemAt(int index) override;
372
379 virtual bool AddItem(const TreeViewNode &item) override;
380
388 virtual bool InsertItem(int index, const TreeViewNode &item) override;
389
397 virtual bool UpdateItem(int index, const TreeViewNode &newValue) override;
398
404 virtual bool RemoveItemAt(int index) override;
405
411 TreeViewNode AddItem(const std::wstring &text);
412
419 TreeViewNode InsertItem(int index, const std::wstring &text);
420
425 ImageList GetImageList(TreeViewImageList imageList);
426
432 HIMAGELIST SetImageList(TreeViewImageList imageList, HIMAGELIST value);
433
434 private:
438 TreeViewNode _GetRoot();
439
443 TreeViewNode _InsertItem(HTREEITEM hParent, HTREEITEM hInsertAfter, const std::wstring &text);
444 };
445}
相等性比较接口
Definition IComparable.h:14
为支持ToString方法的类提供统一接口
Definition IToString.h:13
图像列表
Definition ImageList.h:12
表示可用于呈现一组项的控件
Definition ItemsControl.h:20
属性
Definition Property.h:1743
只读属性
Definition Property.h:1828
树视图项
Definition TreeView.h:20
bool IsExpanded() const
判断当前节点是否展开
bool IsNull() const
判断当前项是否为空
bool SetExpand(bool expand)
设置当前节点展开或折叠
HTREEITEM GetHandle() const
获取当前项的句柄
bool SetImages(int imageIndex, int selectedImageIndex)
设置当前节点的图像
bool Expand()
展开当前节点
TreeViewNode()=default
默认构造函数
int DeleteAllChildren()
删除当前节点的所有子节点
bool Delete()
删除当前节点
bool SetText(const std::wstring &text)
设置当前项的文本
TreeViewNode GetParent() const
获取父节点
HWND GetOwnerHandle() const
获取所属树视图控件的窗口句柄
bool SetUserData(void *data)
设置与当前节点关联的用户数据
TreeViewNode GetNextNode() const
获取下一个节点
TreeViewNode GetPreviousNode() const
获取上一个节点
int GetChildCount() const
获取当前节点的直接子节点数
bool Collapse()
折叠当前节点
void SetCheck(bool check)
设置当前节点的复选框选中状态
std::wstring ToString() const
获取当前项的文本
void * GetUserData() const
获取与当前节点关联的用户数据
bool Select()
选中当前节点
std::wstring GetText() const
获取当前项的文本
TreeViewNode GetFirstChildNode() const
获取第一个子节点
TreeViewNode AddChild(const std::wstring &text)
添加子节点到当前节点下
bool IsSelected() const
判断当前节点是否被选中
TreeViewNode(HWND hwnd, HTREEITEM hitem)
创建TreeViewItem
bool IsChecked() const
判断当前节点是否被选中复选框
bool Equals(const TreeViewNode &other) const
判断当前项与另一个项是否相等
TreeViewNode InsertAfter(const std::wstring &text)
在当前节点后插入新节点
树视图控件
Definition TreeView.h:238
const Property< double > IndentWidth
缩进宽度
Definition TreeView.h:269
virtual void SetBackColor(Color color, bool redraw) override
设置背景颜色
virtual bool OnNotified(NMHDR *pNMHDR, LRESULT &result) override
父窗口接收到WM_NOTIFY后且父窗口OnNotify函数返回false时调用发出通知控件的该函数
virtual void SetSelectedIndex(int index) override
设置选中项索引
virtual void OnGetDispInfo(NMTVDISPINFOW *pNMInfo)
当OnNotified接收到TVN_GETDISPINFO通知时调用该函数
virtual TreeViewNode GetItemAt(int index) override
获取指定索引处子项的值
virtual bool OnItemExpanding(NMTREEVIEWW *pNMTV)
节点展开或折叠前调用该函数
virtual bool AddItem(const TreeViewNode &item) override
添加新的子项
const Property< Color > LineColor
线条颜色
Definition TreeView.h:264
virtual bool OnDoubleClicked(NMHDR *pNMHDR, LRESULT &result)
控件被双击时调用该函数
virtual TreeViewNode GetSelectedItem() override
获取选中项
virtual int GetSelectedIndex() override
选中项的索引,当无选中项时为-1
const Property< bool > CheckBoxes
是否在第一列显示复选框
Definition TreeView.h:259
TreeViewNode InsertItem(int index, const std::wstring &text)
在指定索引处插入新节点
virtual bool RemoveItemAt(int index) override
移除指定索引处的子项
HIMAGELIST SetImageList(TreeViewImageList imageList, HIMAGELIST value)
设置指定类型的图像列表
virtual bool InsertItem(int index, const TreeViewNode &item) override
添加子项到指定索引
virtual int GetItemsCount() override
获取子项数
TreeViewNode AddItem(const std::wstring &text)
添加新节点到根节点
virtual void SetTextColor(Color color, bool redraw) override
设置文本颜色
ImageList GetImageList(TreeViewImageList imageList)
获取指定类型的图像列表
TreeView()
初始化TreeView
virtual void OnItemChanged(NMTVITEMCHANGE *pNMInfo)
节点某些属性发生变化时调用该函数
virtual void Clear() override
清空所有子项
virtual bool UpdateItem(int index, const TreeViewNode &newValue) override
更新指定位置的子项
const ReadOnlyProperty< TreeViewNode > Root
根节点
Definition TreeView.h:249
virtual bool OnClicked(NMHDR *pNMHDR, LRESULT &result)
控件被单机时调用该函数
const ReadOnlyProperty< int > AllItemsCount
所有节点数
Definition TreeView.h:254
virtual void OnItemExpanded(NMTREEVIEWW *pNMTV)
节点展开或折叠后调用该函数
颜色
Definition Color.h:16
树视图节点复选框状态改变事件参数类型
Definition TreeView.h:226
树视图节点已展开或折叠事件参数类型
Definition TreeView.h:217
树视图节点正在展开或折叠事件参数类型
Definition TreeView.h:207
表示特定类型路由事件的事件参数类型,继承自该类的类型可以直接作为AddHandler函数的模板参数
Definition RoutedEventArgs.h:21