我做个树型控件,想在其中的每个节点放图标显示,但是我增加了,就是不显示,但是却在每个节点的名称前有个空,好像是放图标的,但是为什么没有显示呢,请问各位高手,在线等.
下面是我的部分代码:       HICON hIcon[2]; 
        CImageList  m_imagelist; 
        m_imagelist.Create(16,16,ILC_COLOR8 | ILC_MASK,2,2); 
       //建立一个图像列表 
     
              hIcon[0]=AfxGetApp()->LoadIcon(IDI_FOLD); 
    hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON1); 
     m_imagelist.SetBkColor (RGB(0,100,100));
     m_imagelist.Add (hIcon[0]);
     m_imagelist.Add(hIcon[1]);
     m_tree.SetBkColor(RGB(204, 236, 255));
     m_tree.SetImageList(&m_imagelist,TVSIL_NORMAL);
               tvi.hParent=TVI_ROOT;
                tvi.hInsertAfter=TVI_LAST;
                tvi.item.mask=TVIF_TEXT | TVIF_IMAGE 
         | TVIF_SELECTEDIMAGE | TVIF_PARAM;
                tvi.item.pszText="this is ";
                 tvi.item.iImage=0;
               m_tree.InsertItem(&tvi);

解决方案 »

  1.   

    我想有几个可能:1、没有创建CImageList对象,或对象中没有成员。2、没有把树控件和图像列表关联3、在增加节点时没有把图标成员加入。只是一点建议
      

  2.   

    m_imagelist在这代码执行后还在吗?
      

  3.   

    CImageList  m_imagelist; // 不能作为局部变量
    // m_imagelist 改成对话框的一个成员变量就行了
      

  4.   

    我只是假设,如果不对就算了。
    如果你只是加入了一个根节点,而且又没有这一条
    tvi.item.iSelectedImage=0;
    则刚好加入后根被选中,而选中时刚好没有图标可显示,而你其他时候的设置又是正确的,也就是说当它没有被选中时有图标可显示,所以这时便出现了一个空位。
      

  5.   

    BOOL CListTableFieldDlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();

        SetIcon(m_hIcon, TRUE); // Set big icon
    SetIcon(m_hIcon, FALSE); // Set small icon
    //m_treeCtl.SetBkColor(::GetSysColor(COLOR_INFOBK));
    m_ImgLst.Create(IDB_TREE,16,1,RGB(0,255,255));//m_ImgLst为成员变量CImageList m_ImgLst;  IDB_TREE是bmp资源id m_treeCtl.SetImageList(&m_ImgLst,TVSIL_NORMAL); //m_treeCtl是树形控件
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }/*=======================================================
    功能:
        用于取出数据库的结构以及表的结构,并将他们按树形结构
    排列出来
    主要函数:
        CTreeCtrl::InsertItem();
    历史纪录:
         andy-2002/12/7
    =======================================================*/
    void CListTableFieldDlg::OnOK() 
    {
    // close and delete any open recordsets
    if (m_pTableset)
    {
    if (m_pTableset->IsOpen())
    m_pTableset->Close();
    delete m_pTableset;
    m_pTableset = 0;
    }
    if(m_pColumnset)
    {
    if (m_pColumnset->IsOpen())
    m_pColumnset->Close();
    delete m_pColumnset;
    m_pColumnset = 0;
    } // close the database
    if (m_Database.IsOpen())
    m_Database.Close(); // open the database
    if (m_Database.Open(NULL,FALSE,TRUE))
    {
    if (!FetchTableInfo())
    {
    AfxMessageBox("Fetch  Table Infomation Error!");
    return;
    }
    else
    {
    //形成树形结构
    m_hRoot=m_treeCtl.InsertItem(GetDSN(),0,1); //数据库名
    m_pTableset->MoveFirst();
              while(!m_pTableset->IsEOF())                 //表
    {
    m_hParent=m_treeCtl.InsertItem(m_pTableset->m_strTableName,0,1,m_hRoot);
    if(!FetchColumnInfo(m_pTableset->m_strTableName))
    {
    AfxMessageBox("Fetch Column Infomation Error!");
    return;
    }
    else 
    {
    m_pColumnset->MoveFirst();
        while(!m_pColumnset->IsEOF())        //字段
    {
       m_treeCtl.InsertItem(m_pColumnset->m_strColumnName,0,1,m_hParent,TVI_LAST);
       m_pColumnset->MoveNext();
    }
    }                m_pTableset->MoveNext(); } }
    }
    /// CDialog::OnOK();
    }
      

  6.   

    你少了这一句:m_treeCtl.SetImageList(&m_ImgLst,TVSIL_NORMAL); //m_treeCtl是树形控件
      

  7.   

    HICON hIcon;
    hIcon = AfxGetApp()->LoadIcon( IDI_ICON1 );
    m_imagelist.Create( 16,16,0,1,1 );
    m_imagelist.SetBkColor( RGB( 0,0,255 ) );
    m_imagelist.Add( hIcon );
    hIcon = AfxGetApp()->LoadIcon( IDI_ICON2 );
    m_imagelist.Add( hIcon );
    m_treectrl.SetImageList( &m_imagelist,TVSIL_NORMAL );
    m_imagelist 应该是.cpp的一个成员变量,而且要保证你的hIcon 是16*16的,
    如果是32*32的可能也显示不出来,我以前也碰到过这样的问题,
    你试试看