2011-12-24 31 views
0

画像リストを使用して画像をリストビューで表示しています。これまでのところ、私は画像リスト内のすべての画像を表示することができましたが、各画像間の間隔は非常に大きいです。だから私は別の問題を引き起こしたSend Message methodを使用しました。これで、マウスをクリックしたり移動したりすると、画像が見えなくなります。どうすればこの問題を解決できますか?マウス移動した後リストビュー内の画像間の間隔を調整する方法

enter image description here

:マウス移動する前に

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

また、私はリストビュー余裕がAllに設定されているが、この大きな左マージンを持っています= 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は唯一の "アイコン" ビュースタイルとリストビューに適用されますLOWORD

関連する問題