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

phisherr 2005-08-27 05:05:29
每个改显图的地方都是个空白,
那位高手有空来指点一下。

先谢谢了!

这是一段添加图的程序:
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;
.............

...全文
115 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2005-08-29
  • 打赏
  • 举报
回复
局部变量,离开这个函数就失效了。
phisherr 2005-08-29
  • 打赏
  • 举报
回复
哦,谢谢各位了!
快乐鹦鹉 2005-08-29
  • 打赏
  • 举报
回复
晕,CImageList m_ImageList;是局部变量阿?
注意编码风格阿。一般m_表示成员变量。。。。。。
局部变量当然不行了。SetImageList只是将m_ImageList和listctrl关联起来,listctrl应该只是记录了m_ImageList的指针或者引用对象。并没有进行复制。所以你用局部变量,当函数结束时,m_ImageList就完蛋了,所以你的图像也没有了。。。。。。
也不要用指针,只需要定义为类成员变量就够了。
phisherr 2005-08-28
  • 打赏
  • 举报
回复
hohowu(北冥鲲) 说得对!

但是我就是不明白为什么一用CImageList* 问题就解决了?
为什么,直接定义CImageList 的对象不行?
菜牛 2005-08-28
  • 打赏
  • 举报
回复
TreeInserItem的mask有没有包括TCIF_IMAGE?
菜牛 2005-08-28
  • 打赏
  • 举报
回复
TreeInserItem的mash有没有包括TCIF_IMAGE?
快乐鹦鹉 2005-08-27
  • 打赏
  • 举报
回复
你这些图标确认是16*16的么?
hohowu 2005-08-27
  • 打赏
  • 举报
回复
我刚好也碰上了这个问题,我是这么解决的。

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);
真相重于对错 2005-08-27
  • 打赏
  • 举报
回复
//修改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;
phisherr 2005-08-27
  • 打赏
  • 举报
回复
但是,我是按照一般参考书上的方法做的啊, 为什么会出错?
比较郁闷!
csnew 2005-08-27
  • 打赏
  • 举报
回复
将你说的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

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧