想在基于CTreeView的CServerTreeView类上的每个节点加图标
怎么实现啊?
哪有有例子啊?

解决方案 »

  1.   

    试下添加CImageList m_ImageList;m_ImageList.Create(16,16,ILC_COLOR32,2,2);
    m_ImageList.Add(theApp.LoadIcon(IDI_ICON1));
    m_ImageList.Add(theApp.LoadIcon(IDI_ICON2));
    m_TreeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL);
      

  2.   

    在网上找到了一个基于CTreeCtrl封装的很好的类CTreeCtrlBT
    但却不知道怎么加到我的程序里
    因为程序是基于CTreeView的
    所以并不需要creat一个树形控件,且所有的树形控件对象都是用的GetTreeCtrl()
    比如:m_hRootItem = GetTreeCtrl().InsertItem("游戏平台", 0, 0, TVI_ROOT, TVI_LAST);
    如果直接用CTreeCtrlBT的对象m_TreeCtrlBT去代替GetTreeCtrl()的话,就要create一个树形控件,但在基于CTreeView的类里并不需要这样动态创建树形控件
    所以想问,有什么两全其美的办法,让基于CTreeCtrlCTreeCtrlBT类在基于CTreeView的类中使用???额....我说的大家看的明白么?
      

  3.   


    void CSmsTreeView::OnInitialUpdate() 
    {
    CTreeView::OnInitialUpdate();
    // TODO: Add your specialized code here and/or call the base class
    //创建树控件begin
    if (m_bFirst)
    {
    //创建图标列表begin
    m_ImageList.Create (32,32,TRUE | ILC_COLOR8,2,2);
    m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_BOX));
    m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_SUB));
    m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_INPUT));
    m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_FOLDER));
    m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_FLAG));
    m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_SOME_LETTER));
    m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_DOUBLE));
    //创建图标列表end CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl ();
    CtlTree.SetBkColor (RGB(230,250,250));
    CtlTree.SetImageList (&m_ImageList,TVSIL_NORMAL);
    int i=0;
    TV_INSERTSTRUCT tvRoot;//树根
    TV_INSERTSTRUCT tvSecond;//树枝
    tvRoot.hParent=NULL;
    tvRoot.item.pszText="本地";
    tvRoot.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
    tvRoot.item.iImage=i;
    tvRoot.item.iSelectedImage=i;
    HTREEITEM item_root=CtlTree.InsertItem (&tvRoot);
    CtlTree.SetItemData(item_root,(DWORD)0);
    CString strSecond[6]={"收件箱","发件箱","草稿箱","收藏夹","垃圾箱","报告箱"};
    for(i=0;i<6;i++)
    {
    tvSecond.hParent=item_root;
    tvSecond.item.pszText=(LPTSTR)(LPCTSTR)strSecond[i];
    tvSecond.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
            tvSecond.item.iImage=1;
    tvSecond.item.iSelectedImage=2;
    HTREEITEM item_second=CtlTree.InsertItem (&tvSecond);
    CtlTree.SetItemData(item_second,(DWORD)(i+1));
    CtlTree.Expand(item_root,TVE_EXPAND);
    DWORD dwStyle=GetWindowLong(CtlTree.m_hWnd ,GWL_STYLE);
    }
    m_bFirst = FALSE; 
    }
    //创建树控件end
    }
      

  4.   

    if(NULL == m_ServerImgList.GetSafeHandle())
    {
    m_ServerImgList.Create(16, 16, ILC_COLOR24 | ILC_MASK, 0, 256); CBitmap m_Bmp;
    m_Bmp.LoadBitmap(IDB_LOBBY_BITMAP); //IDB_LOBBY_BITMAP是有很多个ico组成的位图
    if(NULL != m_Bmp.GetSafeHandle())
    {
    m_ServerImgList.Add(&m_Bmp, RGB(3, 126, 129));
    m_Bmp.DeleteObject();
    }
    }if(NULL != m_ServerImgList.GetSafeHandle())
    {
    GetTreeCtrl().SetImageList(&m_ServerImgList, TVSIL_NORMAL);
    }程序运行发现,可以节点上加载图片成功,但不明白的是,这段代码是如何选位图上的哪几ico放在程序中?如果我要指定哪个放在哪个节点上是怎么做呢?