Как настроить интервал между изображениями в списке - PullRequest
0 голосов
/ 24 декабря 2011

Я использую список изображений, чтобы показать изображения в виде списка.Пока я могу отображать все изображения в списке изображений, но расстояние между ними очень велико.Поэтому я использовал метод отправки сообщения , который породил еще одну проблему.Теперь, когда я щелкаю или перемещаю мышь (горячее отслеживание включено), любое изображение становится невидимым.Как я могу решить эту проблему?

Imports System.Runtime.InteropServices

Public Class Form1

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _
    Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
    End Function

    Const LVM_FIRST As Integer = &H1000
    Const LVM_SETICONSPACING As Integer = LVM_FIRST + 53

    Public Sub SetSpacing(ByVal x As Int16, ByVal y As Int16)
        SendMessage(Me.ListView1.Handle, LVM_SETICONSPACING, 0, x * 65536 + y)
        Me.ListView1.Refresh()
    End Sub


    Private Sub Display()
        For i As Integer = 0 To ImageList1.Images.Count - 1
            Dim item As New ListViewItem()
            item.ImageIndex = i
            Me.ListView1.Items.Add(item)
        Next
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Display()
        SetSpacing(200, 16)
    End Sub

End Class

До перемещения мыши:

enter image description here

После перемещения мыши:

enter image description here

Также у меня есть это большое левое поле, хотя для поля списка установлено значение Все = 3

Первый столбец изображений не отображается !!!

enter image description here

1 Ответ

0 голосов
/ 06 июня 2012

В аргументах x и y необходимо указать ширину и высоту значков.

MSDN (http://msdn.microsoft.com/en-us/library/windows/desktop/bb761176(v=vs.85).aspx):

Значения для lParam относятся кверхний левый угол растрового изображения значка. Поэтому, чтобы установить интервал между значками, которые не перекрываются, значения lParam должны включать размер значка, а также количество пустого пространства, требуемого между значками. Значения, которые не включают ширинузначок приведет к наложению.

И вам нужно инвертировать:

x * 65536 + y -> x + y * 65536

у в HIWORD, х в LOWORD

...