16

在 Windows 7 的 Windows 资源管理器列表视图(据称根本不是列表视图)的详细信息视图中,您可以在第一列(名称)中启动选择框。您只需要在实际名称之外开始。

Windows 7 的 Windows 资源管理器选择框

详细信息视图中的默认样式列表视图控件也是如此。

但是,如果您将列表视图控件设置为资源管理器样式(使用SetWindowTheme),应该模仿 Windows 资源管理器,这将不再起作用。您只能在第二列和后面的列中开始选择。

SetWindowTheme(listView1.Handle, "explorer", null);

有没有办法让列表视图模仿资源管理器的选择风格?

我想没有设置可以启用这种行为,并且必须对其进行编码。就像处理鼠标按下和触发选择一样。但我不知道该怎么做。

谢谢。

注意,我使用的是 C++Builder,但这应该是纯粹的 Win32 问题。我也用 WinForms 对此进行了测试(因此上面的 C# 示例)。

4

2 回答 2

12

有没有办法让列表视图模仿资源管理器的选择风格?

不,SysListView32explorer主题中不会那样做。现代 Explorer 使用的控件实际上是DirectUIHwnd. 而且您无法使用其中之一。

获得行为的唯一方法DirectUIHwnd是自己编写代码。我希望这是可能的,但我也希望它很难实现。

于 2013-04-01T20:06:37.177 回答
9

实际上有一种方法可以模仿 Explorer 的选择行为。它需要大量额外的声明性工作,但这是可能的。

您需要IListView通过未记录的消息获取未记录的接口LVM_QUERYINTERFACE(请注意,Windows Vista 和 Windows 7+ 的接口声明和 GUID 不同)。关于常量和声明的详细信息可以在这里找到:

获取接口后,您只需调用SetSelectionFlags(1, 1)方法即可。瞧,你完成了。

于 2015-09-07T03:14:18.730 回答