Treectrl 为什么在给子节点添加图标时,它的父节点也自动有了图标?

melody_zyp 2010-08-25 04:08:07
如题,我给树控件的两个子节点添加图标,并没有给父节点添加,结果它的父节点也都有图标显示 这是为什么呢?
代码:
//首先往imageList里面添两张图
CImageList* imageList=new CImageList();
imageList->Create(19, 19, ILC_COLOR24|ILC_MASK, 20, 1);
HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,"D:\\Project\\TEMP\\1.bmp",IMAGE_BITMAP,
19,19,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
CBitmap* m_bitmap = new CBitmap();
m_bitmap->Attach(hBitmap);
imageList->Add(m_bitmap,RGB(0, 0, 0));

HBITMAP hBitmap1 = (HBITMAP)LoadImage(NULL,"D:\\Project\\TEMP\\2.bmp",IMAGE_BITMAP,
19,19,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
CBitmap* m_bitmap1 = new CBitmap();
m_bitmap1->Attach(hBitmap1);
imageList->Add(m_bitmap1,RGB(0, 0, 0));

//设置TreeCtrl的属性
DWORD dwStyle = GetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE);
dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;
SetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE,dwStyle);

//将TreeCtrl与imageList关联起来
m_TreeCtrl.SetImageList(imageList,TVSIL_NORMAL);

HTREEITEM hRoot,hItem,hItem1,hItem2,hSubItem,hSubItem1,hSubItem2;
hRoot = m_TreeCtrl.InsertItem("我的电脑");
hItem = m_TreeCtrl.InsertItem( "Parent1 ",hRoot);
//只给如下两个子节点添加图标
hSubItem = m_TreeCtrl.InsertItem("child1",0,1,hItem);
hSubItem1 = m_TreeCtrl.InsertItem("child2",0,1,hItem,hSubItem);

hItem1 = m_TreeCtrl.InsertItem( "Parent2 ",hRoot,hItem);
hItem2 = m_TreeCtrl.InsertItem( "Parent3 ",hRoot,hItem1);

结果:
在所有的节点前都有图标(是我放入imageList里的第一张图片),这是为什么呢???


另外:
有没有什么方法可以在插入子节点的时候不是一个字符串 eg "child1"
而是一个其他的控件 例如子节点是个Radio Button的控件 ??

请大家指教~! 谢谢~!
...全文
115 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
melody_zyp 2010-08-26
TO leodream:
我现在的现象就是只给两个子节点加图标,结果其他父节点也都有图标了,但是我并没有在程序上给父节点加图标啊 ,看:
hRoot = m_TreeCtrl.InsertItem("我的电脑");
hItem = m_TreeCtrl.InsertItem( "Parent1 ",hRoot);
//只给如下两个子节点添加图标
hSubItem = m_TreeCtrl.InsertItem("child1",0,1,hItem);
hSubItem1 = m_TreeCtrl.InsertItem("child2",0,1,hItem,hSubItem);

hItem1 = m_TreeCtrl.InsertItem( "Parent2 ",hRoot,hItem);
hItem2 = m_TreeCtrl.InsertItem( "Parent3 ",hRoot,hItem1);

我想知道这是为什么 ??还有就是怎么能解决这个问题。。。。
回复
leodream 2010-08-25
没功夫研究,但是要不出错的话插入根节点的时候最好用这个参数TVI_ROOT
你这样改下试试:
hRoot = m_TreeCtrl.InsertItem("我的电脑",1,1,TVI_ROOT);
hItem = m_TreeCtrl.InsertItem("Parent1",1,1,TVI_ROOT,hRoot);
回复
china200_ok 2010-08-25
好像不能把CTreeCtrl的风格设置为Radio Button,但是可以设置成Check Button(TVS_CHECKBOXES )
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2010-08-25 04:08
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……