MFC-TreeControl

效果如图:
MFC-TreeControl_第1张图片

添加项:

    //获取编辑框中的文本
    CString strText;
    GetDlgItemText(IDC_EDIT, strText);
    //获取选中的项,返回一个树形控件句柄
    HTREEITEM hTree = m_tree.GetSelectedItem();
    if (hTree == nullptr)
        hTree = TVI_ROOT;//如果当前没有选中某一项,就把这个句柄设为根

    //插入树的结构
    TVINSERTSTRUCT ts = { 0 };
    ts.hParent = hTree;//要插入的那一项是hTree的子项
    ts.hInsertAfter = TVI_LAST;//插入根的后面
    ts.item.pszText = strText.GetBuffer();//要插入的文本
    ts.item.mask = TVIF_TEXT;//插入的是文本

    HTREEITEM hNewItem = m_tree.InsertItem(&ts);
    m_tree.SelectItem(hNewItem);//选中新插入的项
    m_tree.EnsureVisible(hNewItem);//确保可见,防止文本过长

删除项:

    //获取选中项然后删除
    HTREEITEM hTree = m_tree.GetSelectedItem();
    if (hTree == nullptr)
    {
        AfxMessageBox(_T("没有选中节点"));
        return;
    }
    //删除后选中它的父节点,否则默认选中它的兄弟节点(如果有的话)
    HTREEITEM hParent = m_tree.GetParentItem(hTree);
    m_tree.DeleteItem(hTree);
    m_tree.SelectItem(hParent);

修改项:

    //获取选中项
    HTREEITEM hTree = m_tree.GetSelectedItem();
    if (hTree == nullptr)
    {
        AfxMessageBox(_T("没有选中节点"));
        return;
    }
    //获取修改后的文本
    CString strText;
    GetDlgItemText(IDC_EDIT, strText);
    if (strText.GetLength() == 0)
    {
        AfxMessageBox(_T("请输入文本"));
        return;
    }
    //修改文本
    m_tree.SetItemText(hTree, strText);

当选中某一项的时候使其文本显示在文本框中,在树形控件中的事件消息中选择TVN_SELCHANGED

void CMFCTESTDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;

    //获取选中项
    HTREEITEM hTree = m_tree.GetSelectedItem();
    if (hTree == nullptr)
    {
        return;
    }
    //获取选中项的文本并显示在文本框中
    CString strText = m_tree.GetItemText(hTree);
    SetDlgItemText(IDC_EDIT, strText);
}

你可能感兴趣的:(mfc,控件,CString,树形控件,TreeContro)