下面是实现的部分代码:
public partial class Form1 : Form
{
//在Windwos XP下
//窗体上包含一个按钮,一个ListView,ListView中有三列,Detail模式,
public Form1()
{
InitializeComponent();
//imageList1中包含两个图片,大小为18*16;
listView1.SmallImageList = imageList1;
SendMessage(listView1.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_SUBITEMIMAGES, LVS_EX_SUBITEMIMAGES);
}
private const int LVM_FIRST = 0x1000;
private const int LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
private const int LVS_EX_SUBITEMIMAGES = 0x0002;
private const int LVIF_TEXT = 0x0001;
private const int LVIF_IMAGE = 0x0002;
private const int LVM_SETITEM = LVM_FIRST + 6;
private struct LV_ITEM
{
public uint mask;
public int iItem;
public int iSubItem;
public uint state;
public uint stateMask;
public IntPtr pszText;
public int cchTextMax;
public int iImage;
public IntPtr lParam;
}
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
[DllImport("user32.dll", SetLastError = true)]
static extern int SendMessage(IntPtr hwnd, int msg, int wParam, ref LV_ITEM lParam);
private void button1_Click(object sender, EventArgs e)
{
ListViewItem item = new ListViewItem("大家");
item.SubItems.Add("我们");
item.SubItems.Add("他们");
listView1.Items.Add(item);
LV_ITEM lvFirst = new LV_ITEM();
lvFirst.mask = LVIF_TEXT | LVIF_IMAGE;//文本+图片
lvFirst.iItem = listView1.Items.Count - 1;//设置的某行的行号
lvFirst.iImage = 0;//imageindex
lvFirst.iSubItem = 0;//subItem Index
lvFirst.pszText = Marshal.StringToHGlobalAnsi(item.Text);//这里可以显示汉字。不能用Marshal.StringToHGlobalUni,否则不能正确显示
SendMessage(listView1.Handle, LVM_SETITEM, 0, ref lvFirst);
//第二列显示图片
LV_ITEM lvitem = new LV_ITEM();
lvitem.mask = LVIF_TEXT | LVIF_IMAGE;
lvitem.iItem = listView1.Items.Count - 1;
lvitem.iImage = 1;
lvitem.iSubItem = 1;
lvitem.pszText = Marshal.StringToHGlobalAnsi(item.SubItems[1].Text);
SendMessage(listView1.Handle, LVM_SETITEM, 0, ref lvitem);
//第三列显示
LV_ITEM lvitem2 = new LV_ITEM();
lvitem2.mask = LVIF_TEXT | LVIF_IMAGE;
lvitem2.iItem = listView1.Items.Count - 1;
lvitem2.iImage = 0;
lvitem2.iSubItem = 2;
lvitem2.pszText = Marshal.StringToHGlobalAnsi(item.SubItems[2].Text);
SendMessage(listView1.Handle, LVM_SETITEM, 0, ref lvitem2);
}
}