简单js树形目录菜单代码(js实现树结构菜单)
树形控件
MFC中使用CTreeCtrl类来封装树形控件各种操作,树形控件可以用于树形结构,比如目录树等。其中有一个根节点root,下面有很多子节点。
常用属性配置:
初始化
设置图标并添加根节点和子节点:
m_icon_list.Create(32, 32, ILC_COLOR32, 3, 3);
UINT icons[] = { IDI_ICON_BTC32, IDI_ICON_LTC32, IDI_ICON_XRP32 };
for (int i = 0; i 3; i++)
展开全文
m_icon_list.Add(AfxGetApp()-LoadIconW(icons[i]));
m_tree.SetImageList(m_icon_list, L对阵IL_NORMAL);
HTREEITEM root1 = m_tree.InsertItem(_T("root1"), 0, 0);
HTREEITEM root2 = m_tree.InsertItem(_T("root2"), 1, 1);
HTREEITEM sub1 = m_tree.InsertItem(_T("sub1"), 2, 2, root1);
m_tree.Expand(root1, TVE_EXPAND);
添加节点
void CMyDlg::OnBnClickedBtnAdd()
{
UpdateData(TRUE);
if (!m_string.GetLength()) {
AfxMessageBox(_T("请输入文本"));
return;
}
HTREEITEM item = m_tree.GetSelectedItem();
if (!item) item = TVI_ROOT;
TVINSERTSTRUCT ts = { 0 };
ts.hParent = item;
ts.hInsertAfter = TVI_LAST;
ts.item.pszText = m_string.GetBuffer();
ts.item.mask = TVIF_TEXT | TVIF_IMAGE;
HTREEITEM new_item = m_tree.InsertItem(ts);
m_tree.SelectItem(new_item);
m_tree.EnsureVisible(new_item);
m_string = _T("");
UpdateData(FALSE);
}
删除节点
void CMyDlg::OnBnClickedBtnDel()
{
HTREEITEM item = m_tree.GetSelectedItem();
if (!item) {
AfxMessageBox(_T("请选择一个节点"));
return;
}
HTREEITEM parent = m_tree.GetParentItem(item);
m_tree.DeleteItem(item);
m_tree.SelectItem(parent);
}
修改节点
void CMyDlg::OnBnClickedBtnModify()
{
UpdateData(TRUE);
HTREEITEM item = m_tree.GetSelectedItem();
if (!item) {
AfxMessageBox(_T("请选择一个节点"));
return;
}
if (!m_string.GetLength()) {
AfxMessageBox(_T("请输入文本"));
return;
}
m_tree.SetItemText(item, m_string);
}
添加事情
选择节点,编辑框显示节点中的内容:
void CMyDlg::OnTvnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast(pNMHDR);
UpdateData(TRUE);
HTREEITEM item = m_tree.GetSelectedItem();
if (!item) {
AfxMessageBox(_T("请选择一个节点"));
return;
}
m_string = m_tree.GetItemText(item);
UpdateData(FALSE);
*pResult = 0;
}