树形控件
MFC中利用CTreeCtrl类来封装树形控件各种操纵,树形控件可以用于树形布局,比如目次树等。此中有一个根节点root,下面有很多子节点。
常用属性设置:
初始化
设置图标并添加根节点和子节点:
m_icon_list.Create(32,32,ILC_COLOR32,3,3);
UINTicons[]={IDI_ICON_BTC32,IDI_ICON_LTC32,IDI_ICON_XRP32};
for(inti=0;i3;i++)
m_icon_list.Add(AfxGetApp()-LoadIconW(icons[i]));
m_tree.SetImageList(m_icon_list,L对阵IL_NORMAL);
HTREEITEMroot1=m_tree.InsertItem(_T("root1"),0,0);
HTREEITEMroot2=m_tree.InsertItem(_T("root2"),1,1);
HTREEITEMsub1=m_tree.InsertItem(_T("sub1"),2,2,root1);
m_tree.Expand(root1,TVE_EXPAND);
添加节点
voidCMyDlg::OnBnClickedBtnAdd()
{
UpdateData(TRUE);
if(!m_string.GetLength()){
AfxMessageBox(_T("请输入文本"));
return;
}
HTREEITEMitem=m_tree.GetSelectedItem();
if(!item)item=TVI_ROOT;
TVINSERTSTRUCTts={0};
ts.hParent=item;
ts.hInsertAfter=TVI_LAST;
ts.item.pszText=m_string.GetBuffer();
ts.item.mask=TVIF_TEXT|TVIF_IMAGE;
HTREEITEMnew_item=m_tree.InsertItem(ts);
m_tree.SelectItem(new_item);
m_tree.EnsureVisible(new_item);
m_string=_T("");
UpdateData(FALSE);
}
删除节点
voidCMyDlg::OnBnClickedBtnDel()
{
HTREEITEMitem=m_tree.GetSelectedItem();
if(!item){
AfxMessageBox(_T("请选择一个节点"));
return;
}
HTREEITEMparent=m_tree.GetParentItem(item);
m_tree.DeleteItem(item);
m_tree.SelectItem(parent);
}
修改节点
voidCMyDlg::OnBnClickedBtnModify()
{
UpdateData(TRUE);
HTREEITEMitem=m_tree.GetSelectedItem();
if(!item){
AfxMessageBox(_T("请选择一个节点"));
return;
}
if(!m_string.GetLength()){
AfxMessageBox(_T("请输入文本"));
return;
}
m_tree.SetItemText(item,m_string);
}
添加事变
选择节点,编辑框表现节点中的内容:
voidCMyDlg::OnTvnSelchangedTree(NMHDR*pNMHDR,LRESULT*pResult)
{
LPNMTREEVIEWpNMTreeView=reinterpret_cast(pNMHDR);
UpdateData(TRUE);
HTREEITEMitem=m_tree.GetSelectedItem();
if(!item){
AfxMessageBox(_T("请选择一个节点"));
return;
}
m_string=m_tree.GetItemText(item);
UpdateData(FALSE);
*pResult=0;
}
我要评论