I have a listview which displays (eventually) an album cover of an itunes play list with the album name under it. the problem I am having is that I cannot get the album art
That is the baked-in arrangement for tile view. If you want the labels underneath the images then you have to set View = LargeIcon. If that produces an undesirable spacing of images then you can P/Invoke SendMessage() to send the LVM_SETICONSPACING message. This worked well:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class TileView : ListView {
public TileView() {
mSpacing = new Size(48, 48);
}
private Size mSpacing;
public Size IconSpacing {
get { return mSpacing; }
set {
mSpacing = value;
updateSpacing();
}
}
protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
updateSpacing();
}
private void updateSpacing() {
if (this.IsHandleCreated) {
SendMessage(this.Handle, 0x1000 + 53, IntPtr.Zero, (IntPtr)((mSpacing.Height << 16) | mSpacing.Width));
}
}
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}
Change the new IconSpacing property in the designer to work well with the size of the images in your ImageList. You'll see the effect immediately.
Public Class TileView
Inherits ListView
Public Sub New()
mSpacing = New Size(48, 48)
End Sub
Private mSpacing As Size
Public Property IconSpacing As Size
Get
Return mSpacing
End Get
Set(ByVal value As Size)
mSpacing = value
updateSpacing()
End Set
End Property
Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)
MyBase.OnHandleCreated(e)
updateSpacing()
End Sub
Private Sub updateSpacing()
If Me.IsHandleCreated Then
SendMessageW(Me.Handle, &H1000 + 53, IntPtr.Zero, CType((mSpacing.Height << 16) Or mSpacing.Width, IntPtr))
End If
End Sub
Private Declare Function SendMessageW Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr
End Class