那位高手有空来指点一下。
先谢谢了!
这是一段添加图的程序:
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
因为你后面的
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;
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);
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 的对象不行?
但是我就是不明白为什么一用CImageList* 问题就解决了?
为什么,直接定义CImageList 的对象不行?
#9
局部变量,离开这个函数就失效了。
#10
晕,CImageList m_ImageList;是局部变量阿?
注意编码风格阿。一般m_表示成员变量。。。。。。
局部变量当然不行了。SetImageList只是将m_ImageList和listctrl关联起来,listctrl应该只是记录了m_ImageList的指针或者引用对象。并没有进行复制。所以你用局部变量,当函数结束时,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
因为你后面的
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;
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);
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 的对象不行?
但是我就是不明白为什么一用CImageList* 问题就解决了?
为什么,直接定义CImageList 的对象不行?
#9
局部变量,离开这个函数就失效了。
#10
晕,CImageList m_ImageList;是局部变量阿?
注意编码风格阿。一般m_表示成员变量。。。。。。
局部变量当然不行了。SetImageList只是将m_ImageList和listctrl关联起来,listctrl应该只是记录了m_ImageList的指针或者引用对象。并没有进行复制。所以你用局部变量,当函数结束时,m_ImageList就完蛋了,所以你的图像也没有了。。。。。。
也不要用指针,只需要定义为类成员变量就够了。
注意编码风格阿。一般m_表示成员变量。。。。。。
局部变量当然不行了。SetImageList只是将m_ImageList和listctrl关联起来,listctrl应该只是记录了m_ImageList的指针或者引用对象。并没有进行复制。所以你用局部变量,当函数结束时,m_ImageList就完蛋了,所以你的图像也没有了。。。。。。
也不要用指针,只需要定义为类成员变量就够了。
#11
哦,谢谢各位了!