SimpleWindow
载入中...
搜索中...
未找到
ListView.h
1#pragma once
2
3#include "ImageList.h"
4#include "ItemsControl.h"
5#include "List.h"
6#include "ObservableCollection.h"
7#include <commctrl.h>
8
9namespace sw
10{
20
29
54
58 struct ListViewItem {
61
63 int imageIndex = -1;
64
66 bool checked = false;
67
69 ListViewItem() = default;
70
72 ListViewItem(const ListViewItem &other) = default;
73
76
78 ListViewItem(std::initializer_list<std::wstring> subItems);
79 };
80
84 class ListView : public ItemsControl
85 {
86 private:
90 using TBase = ItemsControl;
91
96
101
105 ListViewItem _itemDisplayBuffer;
106
107 public:
112
117
122
127
132
137
142
147
152
153 public:
158
163 void Refresh(bool refreshColumns = true);
164
169
173 bool GetItemCheckState(int index);
174
178 void SetItemCheckState(int index, bool value);
179
185
191
199
205 bool EditItem(int index);
206
211
218 bool EnsureVisible(int index, bool partialOK = false);
219
220 protected:
227
234
240
245
250
257
264
272
280
288
297
303
309
315
321
327
333
339
345
350 virtual void OnCheckBoxClicked(int index);
351
357
363 virtual void OnApplyEdit(int index, const std::wstring &newText);
364
370
378
387
393 virtual void GetCheckBoxRect(int index, RECT &rect);
394
400 virtual void OnGetItemCheckState(int index, bool &checked);
401
407 virtual void OnSetItemCheckState(int index, bool checked);
408
409 private:
414 void _SetCount(int count);
415
419 void _UpdateCount();
420
424 int _GetRowCount();
425
429 int _GetColCount();
430
434 DWORD _GetExtendedListViewStyle();
435
440 DWORD _SetExtendedListViewStyle(DWORD style);
441
447 void _ApplyDispInfo(const ListViewItem &item, NMLVDISPINFOW *pNMInfo);
448
454 void _ApplyColumnInfo(const ListViewColumn &column, LVCOLUMNW *pLvc);
455
461 bool _InsertColumn(int index, const ListViewColumn &column);
462
467 bool _DeleteColumn(int index);
468
474 bool _SetColumn(int index, const ListViewColumn &column);
475
479 void _UpdateColumns();
480
486 void _ColumnsCollectionChangedHandler(
488 };
489};
非模板列表接口,提供基于Variant的元素访问
Definition IList.h:11
支持集合变更通知的接口
Definition INotifyCollectionChanged.h:61
值转换器接口
Definition IValueConverter.h:14
Win32图像列表句柄的RAII包装
Definition ImageList.h:15
表示可用于呈现一组项的控件
Definition ItemsControl.h:13
ItemsControl()
构造函数
列表视图编辑状态结束事件参数类型
Definition RoutedEventArgs.h:419
列表视图
Definition ListView.h:85
const Property< bool > Editable
是否允许编辑
Definition ListView.h:151
void Refresh(bool refreshColumns=true)
刷新控件以反映数据源的当前状态
virtual void OnSetBackColor(Color color, bool redraw) override
设置背景颜色
const Property< bool > MultiSelect
是否允许多选
Definition ListView.h:126
virtual void OnSetItemCheckState(int index, bool checked)
设置指定索引项复选框的选中状态
virtual bool OnNotify(NMHDR *pNMHDR, LRESULT &result) override
接收到WM_NOTIFY后调用该函数
virtual IList * GetDefaultItemsSource() override final
获取默认数据源,当ItemsSource未设置时使用该数据源
virtual void OnHeaderItemChanged(NMHEADERW *pNMH)
接收到内部Header控件发送的HDN_ITEMCHANGEDW通知时调用该函数
virtual void GetDisplayInfo(int index, const Variant &item, NMLVDISPINFOW *pNMInfo)
获取指定子项要显示的信息
virtual void SetSelectedIndex(int index) override
设置选中项索引
virtual void OnHeaderItemDoubleClicked(NMHEADERW *pNMH)
鼠标左键双击列标题时调用该函数
virtual void OnCurrentItemsSourceChanged(IList *oldItemsSource, IList *newItemsSource) override
当前数据源改变时调用该函数
virtual void OnCurrentItemsSourceCollectionChanged(const NotifyCollectionChangedEventArgs &args) override
当数据源集合发生变更时调用该函数
const ReadOnlyProperty< ObservableCollection< ListViewColumn > * > Columns
列集合
Definition ListView.h:116
const ReadOnlyProperty< int > TopIndex
当前列表框页面第一个子项的索引
Definition ListView.h:141
List< int > GetSelectedIndices()
获取所有选中项的索引
void CancelEdit()
取消编辑
virtual void OnGetItemCheckState(int index, bool &checked)
获取指定索引项的复选框是否选中
virtual void OnCheckStateChanged(int index)
复选框选中状态发生改变
virtual void OnItemClicked(NMITEMACTIVATE *pNMIA)
鼠标左键单击某一项时调用该函数
virtual int GetSelectedIndex() override
选中项的索引,当无选中项时为-1
const Property< bool > CheckBoxes
是否在第一列显示复选框
Definition ListView.h:136
virtual void OnGetDispInfo(NMLVDISPINFOW *pNMInfo)
当OnNotified接收到LVN_GETDISPINFOW通知时调用该函数
virtual bool OnItemPrePaint(NMCUSTOMDRAW *pNMCD, bool subItem, LRESULT &result) override
绘制子项前调用该函数
ListView()
初始化ListView
virtual void GetCheckBoxRect(int index, RECT &rect)
获取指定索引项的复选框矩形
const ReadOnlyProperty< ObservableCollection< ListViewItem > * > Items
列表项集合,当未设置ItemsSource时使用该集合作为数据源
Definition ListView.h:111
virtual void OnItemChanged(NMLISTVIEW *pNMLV)
列表项某些属性发生变化时调用该函数
ImageList GetImageList(ListViewImageList imageList)
获取列表视图的图像列表
int GetItemIndexFromPoint(const Point &point)
获取指定点处子项的索引
virtual void OnItemDoubleClicked(NMITEMACTIVATE *pNMIA)
鼠标左键双击某一项调用该函数
const Property< bool > GridLines
是否显示网格线
Definition ListView.h:121
virtual void OnCheckBoxClicked(int index)
复选框被点击时调用该函数
bool EnsureVisible(int index, bool partialOK=false)
确保指定索引的项可见
bool GetItemCheckState(int index)
获取指定索引项的复选框是否选中
bool EditItem(int index)
进入编辑模式,调用该函数前需要将Editable属性设为true
const Property< bool > ShareImageLists
允许将同一图像列表与多个列表视图控件配合使用,控件销毁时若该属性为true则不会销毁图像列表
Definition ListView.h:146
virtual void OnApplyEdit(int index, const std::wstring &newText)
应用编辑结果时调用该函数
virtual bool OnNotified(NMHDR *pNMHDR, LRESULT &result) override
父窗口接收到WM_NOTIFY后且父窗口OnNotify函数返回false时调用发出通知控件的该函数
virtual void OnSetTextColor(Color color, bool redraw) override
设置文本颜色
const ReadOnlyProperty< int > SelectedCount
多选状态下可通过该属性获取选中项的个数
Definition ListView.h:131
virtual void OnEndEdit(ListViewEndEditEventArgs &args)
编辑状态结束后调用该函数
virtual void OnHeaderItemClicked(NMHEADERW *pNMH)
鼠标左键单击列标题时调用该函数
virtual void OnHeaderItemChanging(NMHEADERW *pNMH)
接收到内部Header控件发送的HDN_ITEMCHANGINGW通知时调用该函数
virtual bool OnPrePaint(NMCUSTOMDRAW *pNMCD, LRESULT &result) override
绘制控件前调用该函数
HIMAGELIST SetImageList(ListViewImageList imageList, HIMAGELIST value)
设置列表视图的图像列表
void SetItemCheckState(int index, bool value)
设置指定索引项复选框的选中状态
集合变更事件参数类型
Definition INotifyCollectionChanged.h:33
通用变体类型容器,类型擦除地持有任意类型对象
Definition Variant.h:36
SimpleWindow框架的顶级命名空间,所有公共类型、控件、枚举和工具函数均定义于此。
Definition Alignment.h:4
ListViewColumnAlignment
列表视图的列对齐方式
Definition ListView.h:24
@ Normal
位图置于BmpBox左上角
ListViewImageList
列表视图的图像列表枚举
Definition ListView.h:14
@ Small
包含小图标的图像列表
@ State
包含状态图像的图像列表
@ GroupHeader
组标头的图像列表
颜色
Definition Color.h:16
列表视图的列信息
Definition ListView.h:33
ListViewColumnAlignment alignment
列对齐方式
Definition ListView.h:44
std::wstring header
列标题
Definition ListView.h:35
ListViewColumn(const wchar_t *header, double width=100, ListViewColumnAlignment alignment=ListViewColumnAlignment::Left)
构造函数,默认宽度100,左对齐
double width
列宽度
Definition ListView.h:38
int imageIndex
关联图像在图像列表中的索引,-1表示无图像
Definition ListView.h:41
ListViewColumn(const std::wstring &header, double width=100, ListViewColumnAlignment alignment=ListViewColumnAlignment::Left)
构造函数,默认宽度100,左对齐
列表视图的子项信息
Definition ListView.h:58
int imageIndex
关联图像在图像列表中的索引,-1表示无图像
Definition ListView.h:63
ListViewItem(const ListViewItem &other)=default
默认拷贝构造函数
ListViewItem()=default
默认构造函数
ListViewItem(std::initializer_list< std::wstring > subItems)
使用初始化列表构造
List< std::wstring > subItems
子项文本列表,索引0为主项文本
Definition ListView.h:60
ListViewItem(ListViewItem &&other) noexcept
移动构造函数
bool checked
复选框选中状态
Definition ListView.h:66
表示相对于左上角的点坐标
Definition Point.h:15