又是一个菜问题:我的树控件上的图这么显不出来,空都留出来了;

时间:2021-04-30 08:48:34
每个改显图的地方都是个空白,
那位高手有空来指点一下。

先谢谢了!

这是一段添加图的程序:
CMyAdo2App* pApp = ( CMyAdo2App* )AfxGetApp();
HICON hIconBriefcase = pApp->LoadIcon(IDI_briefcase);
HICON hIconOpen = pApp->LoadIcon(IDI_open);
HICON hIconPic = pApp->LoadIcon(IDI_pic);
CImageList m_ImageList;
m_ImageList.Create(16, 16, ILC_MASK, 3, 3);
m_ImageList.Add(hIconBriefcase);
m_ImageList.Add(hIconOpen);
m_ImageList.Add(hIconPic);
pTree->SetImageList(&m_ImageList, TVSIL_NORMAL);

后面直接用
TreeInserItem.item.iImage = 0;
TreeInserItem.item.iSelectedImage = 1;
         .............

11 个解决方案

#1


将你说的3个ICON合成一个位图,比如你的icon是16*16的,合成48*16的一个位图
因为你后面的 
TreeInserItem.item.iImage = 0;
TreeInserItem.item.iSelectedImage = 1;//有问题,找不到索引号为1的位图
没起作用,并将你的Create改为:
 m_ImageList.Create(IDB_IMAGELIST, 16, 3, RGB(0,0,0))//IDB_IMAGELIST是位图资源id

#2


但是,我是按照一般参考书上的方法做的啊, 为什么会出错?
比较郁闷!

#3


//修改TREE
this->m_imglist.Create( 16 ,16 ,ILC_COLOR8,4 , 4);
tvinsert.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvinsert.item.stateMask = TVIS_STATEIMAGEMASK;
tvinsert.item.state = 0  ;
tvinsert.item.hItem = NULL;
tvinsert.item.lParam = 0;
tvinsert.hInsertAfter = TVI_LAST;
tvinsert.item.pszText = (char*)malloc(strlen(str)+1);
tvinsert.item.iImage = type;

#4


我刚好也碰上了这个问题,我是这么解决的。
         
CImageList* m_ilPicList;
m_ilPicList = new CImageList();
CWinApp* pApp = AfxGetApp();
m_ilPicList->Create(16, 16, TRUE|ILC_COLOR8 , 4, 0);
m_ilPicList->Add(pApp->LoadIcon(IDI_ICON2));
m_ilPicList->Add(pApp->LoadIcon(IDI_ICON3));
m_TreeCtrl.SetImageList(m_ilPicList,TVSIL_NORMAL);
//插入节点
HTREEITEM hRoot=m_TreeCtrl.InsertItem(temp,0,0,TVI_ROOT);

#5


你这些图标确认是16*16的么?

#6


TreeInserItem的mash有没有包括TCIF_IMAGE?

#7


TreeInserItem的mask有没有包括TCIF_IMAGE?

#8


hohowu(北冥鲲) 说得对!

但是我就是不明白为什么一用CImageList* 问题就解决了?
为什么,直接定义CImageList 的对象不行?

#9


局部变量,离开这个函数就失效了。

#10


晕,CImageList m_ImageList;是局部变量阿?
注意编码风格阿。一般m_表示成员变量。。。。。。
局部变量当然不行了。SetImageList只是将m_ImageList和listctrl关联起来,listctrl应该只是记录了m_ImageList的指针或者引用对象。并没有进行复制。所以你用局部变量,当函数结束时,m_ImageList就完蛋了,所以你的图像也没有了。。。。。。
也不要用指针,只需要定义为类成员变量就够了。

#11


哦,谢谢各位了!

#1


将你说的3个ICON合成一个位图,比如你的icon是16*16的,合成48*16的一个位图
因为你后面的 
TreeInserItem.item.iImage = 0;
TreeInserItem.item.iSelectedImage = 1;//有问题,找不到索引号为1的位图
没起作用,并将你的Create改为:
 m_ImageList.Create(IDB_IMAGELIST, 16, 3, RGB(0,0,0))//IDB_IMAGELIST是位图资源id

#2


但是,我是按照一般参考书上的方法做的啊, 为什么会出错?
比较郁闷!

#3


//修改TREE
this->m_imglist.Create( 16 ,16 ,ILC_COLOR8,4 , 4);
tvinsert.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvinsert.item.stateMask = TVIS_STATEIMAGEMASK;
tvinsert.item.state = 0  ;
tvinsert.item.hItem = NULL;
tvinsert.item.lParam = 0;
tvinsert.hInsertAfter = TVI_LAST;
tvinsert.item.pszText = (char*)malloc(strlen(str)+1);
tvinsert.item.iImage = type;

#4


我刚好也碰上了这个问题,我是这么解决的。
         
CImageList* m_ilPicList;
m_ilPicList = new CImageList();
CWinApp* pApp = AfxGetApp();
m_ilPicList->Create(16, 16, TRUE|ILC_COLOR8 , 4, 0);
m_ilPicList->Add(pApp->LoadIcon(IDI_ICON2));
m_ilPicList->Add(pApp->LoadIcon(IDI_ICON3));
m_TreeCtrl.SetImageList(m_ilPicList,TVSIL_NORMAL);
//插入节点
HTREEITEM hRoot=m_TreeCtrl.InsertItem(temp,0,0,TVI_ROOT);

#5


你这些图标确认是16*16的么?

#6


TreeInserItem的mash有没有包括TCIF_IMAGE?

#7


TreeInserItem的mask有没有包括TCIF_IMAGE?

#8


hohowu(北冥鲲) 说得对!

但是我就是不明白为什么一用CImageList* 问题就解决了?
为什么,直接定义CImageList 的对象不行?

#9


局部变量,离开这个函数就失效了。

#10


晕,CImageList m_ImageList;是局部变量阿?
注意编码风格阿。一般m_表示成员变量。。。。。。
局部变量当然不行了。SetImageList只是将m_ImageList和listctrl关联起来,listctrl应该只是记录了m_ImageList的指针或者引用对象。并没有进行复制。所以你用局部变量,当函数结束时,m_ImageList就完蛋了,所以你的图像也没有了。。。。。。
也不要用指针,只需要定义为类成员变量就够了。

#11


哦,谢谢各位了!