您的位置:首页 > 其它

关于CListCtrl显示bmp图片问题的解决

2008-08-24 08:55 387 查看
前几天做一个聊天程序时在实现用户列表时用到了CListCtrl控件,突然想在每列前面加上一个图标或图片。然而能实现ICON图标加载,却不能显示图片。今天终于找到原因了,主要原因是局部对象问题。

先看代码实现:

void CMyListView::OnInitialUpdate()

{

CListView::OnInitialUpdate();

//创建ListCtrl

m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS,

CRect(0,0,400,200),

this, 0);

//设置ListCtrl的风格

m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle()|

LVS_EX_SUBITEMIMAGES );

//------加载位图;

Bitmap[0].LoadBitmap(IDB_BITMAP1);

Bitmap[1].LoadBitmap(IDB_BITMAP2);

Bitmap[2].LoadBitmap(IDB_BITMAP3);

Bitmap[3].LoadBitmap(IDB_BITMAP4);

//Ⅰ.将位图添加到ImageList里面

m_Imagelist.Create(24, 24,ILC_COLOR4|ILC_MASK, 4, 4); //----- 实例图象框;

for (int i = 0 ; i < 4 ; i ++)

{

m_Imagelist.Add(&Bitmap[i], RGB(0, 0, 0));

}

//Ⅱ.将ImageList和ListCtrl关联,关键之二

m_ListCtrl.SetImageList(&m_Imagelist,LVSIL_SMALL);

//3、初始化列表表头

m_ListCtrl.InsertColumn(0,_T("T1"),LVCFMT_LEFT,80);

m_ListCtrl.InsertColumn(1,_T("A1"),LVCFMT_LEFT,32);

m_ListCtrl.InsertColumn(2,_T("A2"),LVCFMT_LEFT,32);

//4、listctrl 创建数据--

CString str;

for(int j = 0;j < 4 ;j ++)

{

m_ListCtrl.InsertItem(j,NULL,1);

LVITEM item; //Item结构,很全的东西

item.iItem = j; //Item索引

item.iSubItem = 0; //SubItem索引

//Ⅲ.设定显示的格式

item.mask = LVIF_IMAGE|LVIF_TEXT; //显示文本和图片

//Ⅳ.设定对应图片的索引值

item.iImage = j; //图片索引值

item.pszText = _T("Virqin"); //在当前Item要显示的文本

m_ListCtrl.SetItem(&item); //设定Item

}

}

以上代码就能实现在列表第一列显示图片,共四行,以及图片后面跟着文字"Virqin"。现在要说的倒不是它实现后的效果,说说我遇到的问题吧,最初我把Bitmap和m_ImageList两个对象都是在当前函数里定义的,因为是局部变量,当本函数执行完后对象就会被析构,所以图像列表和位图都被析构了。
我总结一下出现我这样问题的根本原因还是对C++的对象意识不深,理解太肤浅。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: