【发布时间】: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