我做个树型控件,想在其中的每个节点放图标显示,但是我增加了,就是不显示,但是却在每个节点的名称前有个空,好像是放图标的,但是为什么没有显示呢,请问各位高手,在线等.
下面是我的部分代码: 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);
下面是我的部分代码: 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);
// m_imagelist 改成对话框的一个成员变量就行了
如果你只是加入了一个根节点,而且又没有这一条
tvi.item.iSelectedImage=0;
则刚好加入后根被选中,而选中时刚好没有图标可显示,而你其他时候的设置又是正确的,也就是说当它没有被选中时有图标可显示,所以这时便出现了一个空位。
{
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();
}
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的可能也显示不出来,我以前也碰到过这样的问题,
你试试看