listctrl 显示位图,只要建立一个CImageList 和listctrl建立连接就可以了;
下面详细步骤:
1、在头文件里面:.h
CImageList m_imagelist; //-----创建一个新的图像列表框;
CBitmap bitmap1,bitmap2,bitmap3,bitmap4; //------创建几个位图;
2.在实现文件里面:.cpp
m_showalarm.SetExtendedStyle(m_showalarm.GetExtendedStyle()| LVS_EX_SUBITEMIMAGES );
这里的LVS_EX_SUBITEMIMAGES 使listctr可以使用位图资源;
bitmap1.LoadBitmapA(IDB_MAP1); //------加载位图;
bitmap2.LoadBitmapA(IDB_MAP2);
bitmap3.LoadBitmapA(IDB_MAP3);
bitmap4.LoadBitmapA(IDB_MAP4);
m_imagelist.Create(32, 14,ILC_COLOR32|ILC_MASK, 0, 4); //----- 实例图象框;
m_imagelist.Add(& bitmap1, RGB(0, 0, 0)); //----- 图象框加载位图;
m_imagelist.Add(& bitmap2, RGB(0, 0, 0));
m_imagelist.Add(& bitmap3, RGB(0, 0, 0));
m_imagelist.Add(& bitmap4, RGB(0, 0, 0));
m_showalarm.SetImageList(&m_imagelist,LVSIL_SMALL); //-----m_showalarm 是listctrl的变量名字;现在是listctrl 和 图片框建立连接;
3、初始化listctrl ---
m_showalarm.InsertColumn(0,"T1",LVCFMT_LEFT,39);
m_showalarm.InsertColumn(1,"Text",LVCFMT_LEFT,82);
m_showalarm.InsertColumn(2,"A1",LVCFMT_LEFT,32);
m_showalarm.InsertColumn(3,"A2",LVCFMT_LEFT,32);
m_showalarm.InsertColumn(4,"A3",LVCFMT_LEFT,32);
这里是给listctrl 创建几个列及列头的名字;
4、listctrl 创建数据--
for(int j=0;j<strid.GetCount();j++) //----striid 是我定义的一个字符串列表,里面保存着数据;
{
m_showalarm.InsertItem(j,NULL,1); //--这里是插入一行;
LVITEM item; //这里我准备用item的方式进行插入数据;
item.iItem=j;
item.iSubItem=1;
item.mask=LVIF_TEXT; // 因为我在第二列准备插入的是文本所以这里用LVIF_TEXT;
item.pszText=(LPSTR)(LPCSTR)strid.GetAt(j);
m_showalarm.SetItem(&item);
item.iItem=j;
item.iSubItem=0;
item.mask=LVIF_IMAGE; //这是第一列我插入的是图片,用的是LVIF_IMAGE;
item.iImage=2; // ---------关键就在这里,因为图片框里面现在里面存放了4个图片,2是图片框里面的索引,从0开始。所以选择2就表明现在插入的图片时图片框里面的第三张图片;
m_showalarm.SetItem(&item);
for(int i=2;i<4;i++)
{
item.iItem=j;
item.iSubItem=i;
item.mask=LVIF_IMAGE;
item.iImage=1; //----- 这里两个列我也是插入图片,但是图片我选择的是图片框里的第2张图片,请注意,区别就在这里;想用什么图片只要在图片框里面加载上然后记住他的索引值就可以了。不过注意图片框里的图片要大小一致,不然会出现显示空图片或者乱码;
m_showalarm.SetItem(&item);
}
}
Ok。现在listctrl已经显示的是位图了。