我在对话框的初始化函数里给树控件所有项加了图标1,当选择改变时,变成图标2,我想选中下一个时,上一个被选中的恢复图标1,但是出现了问题,所有被选过的全都保持图标2,怎么办呢?
void CManMeasure::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
m_imagelist.Create (IDB_TREEIMAGE,20,2,ILC_COLOR8);
m_Tree.SetImageList (&m_imagelist,TVSIL_NORMAL);
HTREEITEM hItem,hSubItem;
hItem = m_Tree.InsertItem("sss",0,1,TVI_ROOT);
hItem = m_Tree.InsertItem("ddd",0,1,TVI_ROOT,hItem);
}
void CManMeasure::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
hTreeCurrent=m_Tree.GetSelectedItem ();
m_Tree.SetItemImage(hTreeCurrent,1,true );
*pResult = 0;
}
void CManMeasure::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
m_imagelist.Create (IDB_TREEIMAGE,20,2,ILC_COLOR8);
m_Tree.SetImageList (&m_imagelist,TVSIL_NORMAL);
HTREEITEM hItem,hSubItem;
hItem = m_Tree.InsertItem("sss",0,1,TVI_ROOT);
hItem = m_Tree.InsertItem("ddd",0,1,TVI_ROOT,hItem);
}
void CManMeasure::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
hTreeCurrent=m_Tree.GetSelectedItem ();
m_Tree.SetItemImage(hTreeCurrent,1,true );
*pResult = 0;
}
创建一个ImageList
HICON hicon[2];
CWinApp *pApp = AfxGetApp();
hicon[0] = pApp->LoadIcon(IDI_ICON1);
hicon[1] = pApp->LoadIcon(IDI_ICON2); if(!ImageList.Create(16,16,ILC_COLOR32,2,0))
{
TRACE("Failed to create Image list");
return;
} m_imageList.SetBkColor(RGB(128,128,128)); for(int i = 0; i < 2; i++)
ImageList.Add(hicon[i]); m_ctlTree.SetImageList(&ImageList,TVSIL_NORMAL);添加树节点
ctlTree.InsertItem("Root", 1, 0, TVI_ROOT); //选中显ICON1
你在OnSelchangedTree里面就处理上一次选择的item与当前选择的item
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); //设置图象列表HTREEITEM hItem,hSubItem; TV_INSERTSTRUCT TCItem; //插入数据项数据结构
TCItem.hParent = TVI_ROOT; //增加根项
TCItem.hInsertAfter = TVI_LAST; //在最后项之后
TCItem.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
TCItem.item.pszText = LPSTR(LPCTSTR("sss"));
TCItem.item.iImage = 0; //正常图标
TCItem.item.iSelectedImage = 1; //选中时图标hItem = m_Tree.InsertItem(&TCItem); TCItem.hParent = hItem ;
TCItem.item.pszText = LPSTR(LPCTSTR("ddd"));
hSubItem= m_Tree.InsertItem(&TCItem);
你看看下面的你就明白了。CTreeCtrl::InsertItemHTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct );
HTREEITEM InsertItem( UINT nMask,
LPCTSTR lpszItem,
int nImage,
int nSelectedImage,
UINT nState,
UINT nStateMask,
LPARAM lParam,
HTREEITEM hParent,
HTREEITEM hInsertAfter
);HTREEITEM InsertItem( LPCTSTR lpszItem,
HTREEITEM hParent = TVI_ROOT,
HTREEITEM hInsertAfter = TVI_LAST
);HTREEITEM InsertItem( LPCTSTR lpszItem,
int nImage,
int nSelectedImage,
HTREEITEM hParent = TVI_ROOT,
HTREEITEM hInsertAfter = TVI_LAST
);返回值:如果成功则返回新项的句柄;否则返回NULL。参数: lpInsertStruct 一个指向用来指定要插入的tree view项的属性的TVINSERTSTRUCT的指针。
nMask 用来指定要设置的属性的整数。
lpszItem 一个包含项的文本的字符串的地址。
nImage 项的图像在tree view控件的图像列表中的索引。
nSelectedImage 项的被选择图像在tree view控件的图像列表中的索引。
nState 为项的状态指定的值。
nStateMask 指定要设置的状态。
lParam 与此项关联的一个32位的应用程序指定的值。
hParent 要被插入的项的父项的句柄。
hInsertAfter 新项要被插入其后的项的句柄。 说明:
此成员函数用来在一个tree view控件中插入一个新项。