比如像资源管理器里的文件夹在展开的时候,图标换成展开的图标,如何写呢?
void CXXXXDlg::OnItemExpandingTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
if (TVE_EXPAND == pNMTreeView->action)
{
pNMTreeView->itemNew.iImage = 3;// 3是我的imagelist中的想改图标
pNMTreeView->itemNew.iSelectedImage = 3;
UpdateData(FALSE);
}

*pResult = 0;
}
这样写不管用啊!换成pNMTreeView->itemOld也不成,为什么啊?应该怎么写的?
谢谢~

解决方案 »

  1.   

    原来的结点是这样设置的:
    m_TreeCtrlItem.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
    pNMTreeView结构还用设置mask吗?
      

  2.   

    在插入节点时就可以指定选中状态的图标吧
    pNMTreeView->itemNew.iSelectedImage = 新的;
      

  3.   

    CImageList *m_pimagelist;
    HICON icon[2];
    icon[0]=AfxGetApp()->LoadIcon (IDI_TREE2); 
    icon[1]=AfxGetApp()->LoadIcon (IDI_TREE1); m_pimagelist->Create(16, 16, TRUE | ILC_COLOR16, 4, 0);
    m_pimagelist->SetBkColor (RGB(255,255,255));
    m_pimagelist->Add(icon[0]);  //把图标载入图像列表控件
    m_pimagelist->Add(icon[1]);  //把图标载入图像列表控件
    CTreeCtrl* pTree=&GetTreeCtrl();
    pTree->SetImageList(m_pimagelist,TVSIL_NORMAL);  //为tree设置一个图像列表,使CtreeCtrl的节点显示不同的图标 
             pTree->SetTextColor(RGB(0,0,220));//设置tree的背景色*/
    pTree->SetBkColor(RGB(255,255,255));//设置tree的背景色*/pItem = pTree->InsertItem( TP_AREA, 0, 1, ParentItem ); 
    或则
    pItem = pTree->InsertItem( TP_AREA, 1, 0, ParentItem );
      

  4.   

    这个建立的时候我已经用了,我是要在展开的时候动态的改变结点的图标,折叠的时候再换回来,不是在初始化的时候怎么建立CImageList~~~~~~就没人知道吗?
      

  5.   

    自己写个Tree,重载OnPaint 自己重绘
      

  6.   

    OnPaint如何重载啊,能详细些吗?
      

  7.   

    问题解决!
    供大家参考:INT_TREEITEM_IMAGE_COLLAPSE与INT_TREEITEM_IMAGE_EXPAND是const int类型// 更改展开的图标
    void CXXXXDlg::OnItemExpandingTemplateTree(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    if (TVE_EXPAND == pNMTreeView->action)
    m_TreeReportTemplate.SetItemImage(
    pNMTreeView->itemNew.hItem,
    INT_TREEITEM_IMAGE_EXPAND,
    INT_TREEITEM_IMAGE_EXPAND);
    *pResult = 0;
    }// 更改折叠的图标
    void CXXXXDlg::OnItemExpandedTemplateTree(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    if (TVE_COLLAPSE == pNMTreeView->action)
    m_TreeReportTemplate.SetItemImage(
    pNMTreeView->itemNew.hItem,
    INT_TREEITEM_IMAGE_COLLAPSE,
    INT_TREEITEM_IMAGE_COLLAPSE);
    *pResult = 0;
    }