【问题标题】:LVM_SETICONSPACING with virtual ListView in .NET.NET 中带有虚拟 ListView 的 LVM_SETICONSPACING
【发布时间】:2013-08-01 11:57:11
【问题描述】:

我有一个所有者绘制的虚拟列表视图。我将视图设置为 LargeIcon,我将 LargeImageList 设置为适当的图像列表,但是当我调用 LVM_SETICONSPACING 时,它不起作用!也就是说 - 无论我输入什么值,它都没有效果。

我用:

 Const LVM_FIRST As Long = &H1000
 Const LVM_SETICONSPACING As Long = LVM_FIRST + 53
 WinAPI.SendMessage(ListView.Handle, LVM_SETICONSPACING, 0, cy * 65536 + (cx And 65535))

我也试过了:

 WinAPI.SendMessage(ListView.Handle, LVM_SETICONSPACING, 0, cy * 65536 + cx)
 WinAPI.SendMessage(ListView.Handle, LVM_SETICONSPACING, 0, cx * 65536 + cy)

无论我使用什么 cx 和 cy 值,都绝对什么都不做。我尝试了从 10 到 400 的小型 - 没有区别。

之后我尝试刷新列表 - 没有区别。 item.bounds 保持不变,图标行之间的间距为 30px。我如何摆脱这种间距? 我还为 SendMessage 尝试了 Ints 和 IntPtr-s 的变体。

也许问题是我使用的是 Windows 8 64 位(尽管程序是 32 位)?还是在虚拟模式下,listview 会忽略此消息?

我什至通过在 WndProc 覆盖中捕获消息来检查消息是否已发送。

采取 2:

我什至尝试过使用 IntPtr,因为有些人建议没有运气。 我还尝试了 5 的垂直和水平间距的所有可能值: &H50005000, &H00050005, 以及 &H5000000050000000, &H0000000500000005。没有区别,就好像完全被忽略了一样。也许 LVM_SETICONSPACING 有不同的值?

欢迎提出任何建议。

谢谢。

【问题讨论】:

  • 您对 SendMessage() 的声明是错误的,最后 2 个参数是 IntPtr。先从那里开始。
  • 感谢您的评论。我把它绑起来了,但它根本没有任何区别。

标签: .net winforms listview winforms-interop


【解决方案1】:

使用 cx 和 cy 的按位移位来创建正确的 IntPtr 可以代替使用乘法。这个方法在另一个post中有描述。

Private Sub SetImageSpacingForListView(ByVal lView As ListView, ByVal cx As Short, ByVal cy As Short)
  ' http://qdevblog.blogspot.co.uk/2011/11/c-listview-item-spacing.html
  ' http://msdn.microsoft.com/en-us/library/bb761176(VS.85).aspx

  Dim LVM_FIRST As Integer = &H1000
  Dim LVM_SETICONSPACING As Integer = LVM_FIRST + 53
  WinAPI.SendMessage(lView.Handle, LVM_SETICONSPACING, IntPtr.Zero, CType(MakeLong(cx, cy), IntPtr))
End Sub

Private Function MakeLong(ByVal lowPart As Short, ByVal highPart As Short) As Integer
  Return CType(CType(lowPart, UShort) Or CType(highPart << 16, UInteger), Integer)
End Function

【讨论】:

  • 谢谢。试过了,但它在 Windows 8.1 x64 上不起作用。不确定其他操作系统。无论我使用什么值以及是否转换为 IntPtr,它似乎都没有做任何事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 2013-03-15
  • 2019-03-01
  • 2012-04-06
相关资源
最近更新 更多