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

Mar*_*ryl 16 windows winapi listview windows-7 winforms

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

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

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

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

SetWindowTheme(listView1.Handle, "explorer", null);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

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

Dav*_*nan 12

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

不,SysListView32explorer主题中不表现那样.现代资源管理器使用的控件实际上是DirectUIHwnd.而你无法使用其中之一.

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

  • 好吧,我回答了原来的问题.显然,可以进行这样的控制.资源管理器证明了这一点.将它移植到`SysListView32`是否易于处理是另一回事.我持怀疑态度. (4认同)

arb*_*ter 9

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

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

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