我们的项目是用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控件图标的填充代码,可以贴出来参考一下。也可以分析以下我上面的代码!谢谢了!
以下初始化代码:
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控件图标的填充代码,可以贴出来参考一下。也可以分析以下我上面的代码!谢谢了!
再调用m_listctrol.InsertColumn(0,"序号",LVCFMT_LEFT,50,0);
这里面要设置具体的image的索引
{
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;
}