2011-12-24 2 views
0

이미지 목록을 사용하여 이미지를 목록보기로 표시하고 있습니다. 지금까지는 모든 이미지를 이미지 목록에 표시 할 수 있지만 각 이미지 사이의 간격은 매우 큽니다. 그래서 나는 다른 문제를 일으킨 Send Message method을 사용했습니다. 이제 클릭하거나 마우스를 움직이면 (핫 추적 사용) 이미지가 보이지 않게됩니다. 이 문제를 어떻게 해결할 수 있습니까? 마우스를 이동하기 전에목록보기에서 이미지 간 간격을 조정하는 방법

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

이미지의 첫 번째 열이 표시되지 않습니다 !!! 당신의 x와 y 인수에

enter image description here

+0

'LVM_SETICONSPACING'입니다. 그게 네가 쓰고있는거야? –

+0

@CodyGray Listview.View = LargeIcon을 사용하고 있습니다. –

답변

0

, 당신은 폭과 아이콘의 높이를 포함해야합니다.

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

값 아이콘 비트 맵의 ​​좌측 상단 모서리에 상대적이다. 따라서 겹치지 않는 아이콘 사이의 간격을 설정하려면 lParam 값에 아이콘 크기와 아이콘 사이에 빈 공간 인 을 포함해야합니다. 아이콘의 너비가 이 아닌 값은 중복됩니다.

가 그리고 당신은 반전해야

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

y는 HIWORD에 x는 단지 "아이콘"보기 스타일의 ListView에 적용되는 LOWORD

관련 문제