About List-View Controls
list-view是一个窗口 显示 一个结合的项目。
list-view提供许多方法来 安排 和 显示项目 并且 很自由 比起List Boxes.
举例: 附加信息可以 被 显示在 icon和 label的右列。
List-View Styles and Views
list-view可以用5种方法显示数据。
Icon View 设置window_style为LVS_ICON 或者 传送LV_VIEW_ICON通过LVM_SETVIEW消息。每个item是全大小展示。能够自由拖拽。
Small icon view ...LVS_SMALLICON ....LVM_SETVIEW。 每个item以1个小icon带label形式出现。 能够自由拖拽。
List View ...LVS_LIST...LV_VIEW_LIST。 以列的形式排列, 用户不能够拖拽。
Report view(details view) ...LVS_REPORT..LV_VIEW_DETAILS. 每个item占1行. 包含小icon, label.每列有一个header, 可以通过LVS_NOCOLUMHEADER定义。
Tile View ...
图..略..............
1. create完用setwindowslong修改。 展示类型
2. 可以控制icon 或 小icon通过详细设置 LVS_ALIGNTOP 或 LVS_ALIGNLEFT.
3. 更改对齐, 在create之后, 用LVS_ALIGNMASK开始。
4. 附加属性: 是否可编辑label, 是否可以多选. 通过List-View Window Styles。
Extended List-View Styles
扩展类型。
选择框,平滑scroll.等
不能通过普通的GetWindowLong, SetWindowLong来设置。
要通过
ListView_SetExtendedListViewStyle,
ListView_SetExtendedListViewStyleEx, and
ListView_GetExtendedListViewStyle. 这些宏来设置。
Virtual List-View Style
一个抽象列表视图是 LVS_OWNERDATA类型。 他可以控制处理 千万级items.
因为这种类型是要用来 处理 大数据集的, 因此建议缓存被请求的item, 通过一个LVN_ODCACHEHINT通知代码。
Creating a Virtual List-View Control
createWindow然后 设置类型为LVS_OWNERDATA.并且可以和其他类型合并使用。
类型除了LVS_SORTASCENDIGN和LVS_SORDESCENDING。所有都是LVS_AUTOARRANGE
消息除了LVM_ENABLEGROUPVIEW, LVM_GETITEMTEXT, LVM_SETTILEINFO, LVM_MAPIDTOINDEX.
Compatibility Issues
所有4种-icon, small icon, list, detail view - 都支持LVS_OWNERDATA类型。
不存储任何详细信息,所以...?没看懂。
不支持的一些操作。
LVM_ARRANGE 不支持LVA_SNAPTOGRID类型。
Handling Virtual List-View Control Notification Codes
virtual list-view 特有的一些信息。
LVN_GETDISPINFO virtual list-view只保有很少的item, 所以它通常会发送LVN_GETDISPINFO消息去请求item数据。 首先会请求item从cache, 如果没有, 用户必须准备数据。
LVN_ODCACHEHINT 发送该消息 建立需要缓存的item. 已备LVN_GETDISPINFO请求数据时候, 可以申请到。
LVN_ODFINDITEM ?没看懂
Cache Management
list-view会发送大量LVN_GETDISPINFO消息请求数据, 所以需要用LVN_ODACACHEHINT来指定需要缓存的信息。
这个消息以WM_NOTIFY方式通知, lParam指向一个 NMLVCACHEHINT 结构地址。 怎么用?
list-control总是需要item0, 所以cache里必须总有item 0;
List-View Working Areas
可以分工作区 显示 list-view
工作区相关消息:
LVM_GETNUMBEROFWORKAREAS 数量
LVM_SETWORKAREAS 设置区域大小 lParam = array of RECT,
LVM_GETWORKAREAS 获取区域大小
LV_MAX_WORKAREAS 最大数量
无效情况:
LVS_LIST 或 LVS_REPORT
....略
List-View Image Lists
默认的,不显示item图片, 想要显示, 必须设置image-list
Compatibility Issues
并且使他们和控件关联. 1个list-view可以有3个图片列表:
o full-sized icons
o small icon list-view or report view
o state images, use state images such as checked and cleared check boxes.
使用overlay images
1. ImageList_SetOverlayImage功能
2. 关联图片与item, 当你call ListView_InserItem 或 ListView_SetItem宏。
使用INDEXTOOVERLAYMASK设置LVITEM结构。
LVIS_OVERLAYMASK设置为stateMask.
List-View Item States
ListView_SetItemState(hList, 1, LVIS_SELECTED |LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED );
修改哪位, 掩哪位。