您的位置:首页 > 其它

.net 中的ListView在SubItem中添加图片的一个方法

2009-09-05 15:04 447 查看
下面是实现的部分代码:

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐