允许在资源管理器样式列表视图中选择从第一列开始

时间:2013-04-01 20:01:47

标签: windows winforms winapi listview windows-7

在详细信息视图中的Windows 7的Windows资源管理器列表视图(what allegedly is not list view at all)中,您可以在第一个(名称)列中启动选择选取框。你只需要从实际名称之外开始。

Windows 7's Windows Explorer Selection Marquee

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

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

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

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

我认为没有设置来启用此类行为,这必须进行编码。喜欢处理鼠标并触发选择。但我不知道该怎么做。

感谢。

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

2 个答案:

答案 0 :(得分:11)

  

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

不,SysListView32主题中的explorer行为不正常。现代资源管理器使用的控件实际上是DirectUIHwnd。而你无法使用其中之一。

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

答案 1 :(得分:8)

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

您需要通过未记录的IListView消息获取未记录的LVM_QUERYINTERFACE接口(请注意,对于Windows Vista和Windows 7+,接口声明和GUID是不同的)。有关常量和声明的详细信息,请访问:

获取界面后,只需调用SetSelectionFlags(1, 1)方法即可。瞧,你已经完成了。