疑惑的存在,代表着你还未能彻底明白
有时候,我会收到一个关于列表控件ListView的问题,这个问题体现了大家对可定位和不可定位列表缺乏深刻的理解。
这个问题通常是这样的:“我通过LVM_INSERTITEM将一行插入到列表控件中,但是这个项目直接显示在了列表控件的最底下,而不是我希望的位置。”
为了弄明白这是怎么回事儿,你需要首先明白一个概念,即:列表控件可以分为两种类型,一种是所谓的可定位的,另一种是不可定位的。
可定位的列表控件有如下几种:
大图标视图(Large Icon View)
小图标视图(Small Icon View)
标题视图(Title View)
在这些控件中,每个项目都会包含它自己的坐标信息,你也可以使用LVM_SETITEMPOSITION这个消息来设置它的显示位置。当一个新的行被插入到控件中时,它会获得基于插入位置的一个行索引,但它在屏幕上的物理位置是第一个未被其他项目占用的可用空间。
现有的条目不会为新插入的条目挪动空间。
而下列视图则是不可定位的:
视图列表(List View)
报表视图(Report View)
在这些控件中,在这些视图中,条目不能选择它们的显示位置。它们的显示位置由它们的索引来决定。根据这个原理,在不可定位视图中,插入或删除一个条目确实会导致所有后续条目发生偏移。
我想,现在你可以回答这个问题了。为什么条目会追加到列表控件的末尾而不是调用者想要的位置呢?
总结
小知识点GET了真好,大家以后使用列表控件时,是不是疑惑少了一些?
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Positioned vs· non-positioned listview views》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.