ListView多选行为?

时间:2010-12-08 03:33:01

标签: winapi comctl32

Comtl32.dll v6.0中的ListView进行多项选择(使用Shift键时),如下所示(x表示已选中)

00xxxx
xxxxxx
xxxx00

早期版本的ListView按如下方式执行:

00xx00
00xx00
00xx00

有没有办法让它做第一种方式(comctl32 v6.0方式)?

感谢约翰

1 个答案:

答案 0 :(得分:2)

简短的回答是否定的。但是因为那似乎不完整......

ListView不公开允许您更改其选择行为的API,并且正如Hans在其评论中倾斜地提出的那样,这是改变ListView控件中行为的唯一方法。版本6.0之前的comctl32.dll版本带有时间机器。 ListView控件中有很多关于选择事件的独特行为,所以即使您尝试并且所有者绘制控件以修改选择行为的外观,您也会突然面临必须处理可能导致选择更改的几乎荒谬的窗口消息。

值得指出的是,这个问题在完全不同的层面上被误导了。如果应用程序的用户运行的是包含版本6.0之前的comctl32.dll版本的Windows版本,那么这是他们期望出于ListView控件的行为。覆盖和更改这些只会让他们感到困惑,因为它不会像在计算机上找到的其他ListView控件一样工作。相反,如果您的应用程序的用户正在运行包含comctl32.dll v6或更高版本的Windows版本,则ListView控件将已经执行,默认情况下您的描述。 (并且你不应该因为完全相同的原因而想要改变它。)