我们的项目是用VC 6.0开发的,最近把6.0下的项目全部转到VC 2008中。但是发现一个问题,在6.0下tree的各个节点的图标到了2008中竟然不显示了!不知道是为什么?
以下初始化代码:
BOOL DlgBaseParameterSet::OnInitDialog() 
{
CDialog::OnInitDialog();
//ListCtrol 控件的初始化
m_listctrol.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_REGIONAL |LVS_EX_GRIDLINES
|LVS_EX_FLATSB|LVS_EX_ONECLICKACTIVATE |LVS_EX_SUBITEMIMAGES);
m_listctrol.InsertColumn(0,"序号",LVCFMT_LEFT,50,0);
m_listctrol.InsertColumn(1,"名称",LVCFMT_LEFT,120,0);
m_listctrol.InsertColumn(2,"备注",LVCFMT_LEFT,200,0); //树形控件的初始化
    DWORD dwStyles=GetWindowLong(m_treectrol.m_hWnd,GWL_STYLE);//获取树控制原风格
    dwStyles|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;
    SetWindowLong(m_treectrol.m_hWnd,GWL_STYLE,dwStyles);//设置风格
  
    //加载树控件图标
if(!treeImageList.Create(16, 16, ILC_MASK, 2, 1))
AfxMessageBox(_T("创建图象列表失败!")); /*
CBitmap bmp;
bmp.LoadBitmap (IDB_WORKSPACE); treeImageList.Create (16, 16, ILC_MASK, 2, 1);
treeImageList.Add (&bmp, RGB (255, 0, 255));
bmp.DeleteObject();
*/ else
{
treeImageList.Add(AfxGetApp()->LoadIcon(IDI_BASE_PROPRRTY));

}

m_treectrol.SetImageList(&treeImageList, TVSIL_NORMAL); fillTree();
return TRUE;  
}这个代码在6.0下图标可以显示,但是转到2008里面竟然显示不出来,每一个对话框中的TREE图标都没能显示。不知道是怎么回事。你们如果有2008下的tree控件图标的填充代码,可以贴出来参考一下。也可以分析以下我上面的代码!谢谢了!

解决方案 »

  1.   

    应该是treeImageList没有创建成功, 或者没有加载成功
      

  2.   

    应该是先加载treeImageList
    再调用m_listctrol.InsertColumn(0,"序号",LVCFMT_LEFT,50,0);
      

  3.   

    fillTree(); 里面做了什么?贴出来!
      

  4.   

    CTreeCtrl::InsertItem
    这里面要设置具体的image的索引
      

  5.   

    BOOL DlgBaseParameterSet::fillTree()
    {
    m_treectrol.DeleteAllItems();
    DBCommandPtr command = CATVDBConnect::connGIS->createCommand();
    CString sql;
    sql.Format("select oid, name from baseType order by oid");
    try
    {
    command->text(sql);
    command->exec();
    while(command->fetch())
    {
    int oid = command->getInt(0);
    CString str = command->getString(1);
    HTREEITEM item = m_treectrol.InsertItem(str,TVI_ROOT);
    m_treectrol.SetItemData(item, oid);
    }
    }
    catch(DBException& e)
    {
    MessageBox(e.msg(), "");
    }
    return TRUE;
    }
      

  6.   

    这个我们在VC 6.0里面显示图标没问题,把项目加到2008里面,就是有tree图标的图标都不显示。
      

  7.   

    在InsertItem 里面设置具体的图标!这样就行了!