当我们在实现列表控件上的提示信息的时候,我们需要处理的一个难点是处理列表条目的折叠和展开这两种情况。
所谓列表条目的折叠,即在大图标模式(Large Icon Mode)下,列表条目的文字过长而被截断的情况。当用户选择这个条目后,条目的完整文字将会被显示,这个过程就是所谓的展开过程。
在我们的例子代码中,添加如下的代码,就可以轻松处理这种情况了。
>> 请移步至 www.topomel.com 以查看图片 <<
代码解析
我们先创建了一个列表控件并启用了列表的提示信息属性,然后我们添加了一个列表条目,同时设置了一个很长的条目文字。
当执行这个程序的时候,我们会发现,当条目没有被选择的时候,条目的文字将会被截断成两行,如果被选择了,则会展示所有的文字。
我们处理了来自列表控件的 WM_NOTIFY 通知消息,当收到此消息的时候,列表控件通知我们,是时候显示提示信息了。
接下来,是重要的时刻,我们先检查当前条目是否被展开,如果它是展开状态,那么我们将缓冲区设置为空字符串,以便末尾的 StringCchCat 只会将信息提示文本复制到缓冲区中。
另一方面,如果条目是折叠的,那么我们会附加一个行终止符,因为我们希望信息提示包含条目的全文,然后是提示文本。
运行此程序时,将鼠标悬停在折叠和展开的项目上,并观察折叠状态下的的信息提示是否包含条目的名称。
这个技法不复杂,在 MSDN 文档中也提到过,但许多开发者可能没有能注意到,所以今天就正儿八经的写出来,以供参考。
总结
所谓技术债,就是那些我们似懂非懂的东西始终没有彻底弄明白。日积月累,不明白的东西会越来越多,最终积重难返。
这就是我们需要不断求索的原因。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Displaying infotips for folded and unfolded listview items》