TreeControl控件的使用(一)

来源:互联网 发布:java 日志服务器搭建 编辑:程序博客网 时间:2024/05/22 11:53

选择对话框后,直接点击完成


,删除“TODO: 在此处防止对话框控件."静态文本框、“确定”按钮和“取消”按钮。

拖动TreeControl控件。ID设置为IDC_WEB_TREE,属性Has Buttons、Has Lines和Lines At Root都设为True,为了在鼠标划过某个节点时显示提示信息还需要将Info Tip属性设为True。再添加2个静态文本框和2个编辑框,2个按钮。





选择结点对应的编辑框的ID设定为 IDC_EDIT_SELECT,第二个编辑框设定为IDC_EDIT_EDIT ,再在TreeControl控件处鼠标右键 添加变量 m_tree



好了之后,在CTreeControlDlg.h的// CTreeControlDlg 对话框class CTreeControlDlg : public CDialogEx中添加三条语句

CImageList m_imageList; //图像列表

void OnMENUITEMexpandtree(); //展开所有节点
void MyExpandTree(HTREEITEM hTreeItem);  

接着在初始化对话框中 修改为如下

// CTreeControlDlg 消息处理程序BOOL CTreeControlDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码HICON hIcon[3];      // 图标句柄数组   HTREEITEM hRoot;     // 树的根节点的句柄   HTREEITEM hCataItem; // 可表示任一分类节点的句柄   HTREEITEM hArtItem;  // 可表示任一文章节点的句柄   // 加载三个图标,并将它们的句柄保存到数组   hIcon[0] = theApp.LoadIcon(IDI_ICON1);hIcon[1] = theApp.LoadIcon(IDI_ICON2);hIcon[2] = theApp.LoadIcon(IDI_ICON2);// 创建图像序列CImageList对象   m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);// 将三个图标添加到图像序列   for (int i = 0; i<3; i++){m_imageList.Add(hIcon[i]);}// 为树形控件设置图像序列   m_tree.SetImageList(&m_imageList, TVSIL_NORMAL);// 插入根节点   hRoot = m_tree.InsertItem(_T("互联网大牛"), 0, 0); hCataItem = m_tree.InsertItem(_T("百度"), 1, 1, hRoot, TVI_LAST); m_tree.SetItemData(hCataItem, 1);hArtItem = m_tree.InsertItem(_T("手机百度"), 2, 2, hCataItem, TVI_LAST);   m_tree.SetItemData(hArtItem, 2);hArtItem = m_tree.InsertItem(_T("百度地图"), 2, 2, hCataItem, TVI_LAST);  m_tree.SetItemData(hArtItem, 3);hCataItem = m_tree.InsertItem(_T("腾讯"), 1, 1, hRoot, TVI_LAST);  m_tree.SetItemData(hCataItem, 4);hArtItem = m_tree.InsertItem(_T("QQ"), 2, 2, hCataItem, TVI_LAST);  m_tree.SetItemData(hArtItem, 5);hArtItem = m_tree.InsertItem(_T("微信"), 2, 2, hCataItem, TVI_LAST); m_tree.SetItemData(hArtItem, 6);hCataItem = m_tree.InsertItem(_T("阿里巴巴"), 1, 1, hRoot, TVI_LAST);  m_tree.SetItemData(hCataItem, 7); hArtItem = m_tree.InsertItem(_T("淘宝"), 2, 2, hCataItem, TVI_LAST);m_tree.SetItemData(hArtItem, 8); hArtItem = m_tree.InsertItem(_T("天猫"), 2, 2, hCataItem, TVI_LAST);  m_tree.SetItemData(hArtItem, 9);hCataItem = m_tree.InsertItem(_T("蚂蚁金融"), 1, 1, hRoot, TVI_LAST);  m_tree.SetItemData(hCataItem, 10);hArtItem = m_tree.InsertItem(_T("余额宝"), 2, 2, hCataItem, TVI_LAST);  m_tree.SetItemData(hArtItem, 11); hArtItem = m_tree.InsertItem(_T("支付宝"), 2, 2, hCataItem, TVI_LAST);m_tree.SetItemData(hArtItem, 12);hArtItem = m_tree.InsertItem(_T("钱宝"), 2, 2, hCataItem, TVI_LAST); m_tree.SetItemData(hArtItem, 13);hArtItem = m_tree.InsertItem(_T("元宝"), 2, 2, hCataItem, TVI_LAST);  m_tree.SetItemData(hArtItem, 14);hArtItem = m_tree.InsertItem(_T("易宝"), 2, 2, hCataItem, TVI_LAST);  m_tree.SetItemData(hArtItem, 15);//展开所有的节点OnMENUITEMexpandtree();return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE}

再添加TreeControl控件事件TVN_SELCHANGED  修改为如下

void CTreeControlDlg::OnTvnSelchangedMytree(NMHDR *pNMHDR, LRESULT *pResult){LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);// TODO: 在此添加控件通知处理程序代码    CString strText; // 树节点的标签文本字符串           // 获取当前选中节点的句柄         HTREEITEM hItem = m_tree.GetSelectedItem();      // 获取选中节点的标签文本字符串         strText = m_tree.GetItemText(hItem);      // 将字符串显示到编辑框中         SetDlgItemText(IDC_EDIT_SELECT, strText);      *pResult = 0; }

添加按钮点击事件


函数体修改为

void CTreeControlDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码//获取树形控件选择的项目   HTREEITEM hItem = m_tree.GetSelectedItem();//获取选择项目的子项目图像的索引、子项目选择后的图像索引, //以便设置新添加的项目索引  int index,selindex;  m_tree.GetItemImage(m_tree.GetChildItem(hItem),index,selindex);//插入新的子项目到选择的项目下   CString strItem;// 用来存放编辑框的文本GetDlgItemText(IDC_EDIT_EDIT,strItem);m_tree.InsertItem(strItem,index,selindex,hItem);  //展开选择的项目,以便查看新增加的子项 m_tree.Expand(hItem,TVE_EXPAND); }

删除按钮同样添加点击事件

void CTreeControlDlg::OnBnClickedButton3(){// TODO: 在此添加控件通知处理程序代码//获取树形控件选择的项目  HTREEITEM hItem = m_tree.GetSelectedItem();  //删除选择的项目以及其下的所有子项 m_tree.DeleteItem(hItem); }

再定义来两个函数 用来实现展开树的所有节点

void CTreeControlDlg::OnMENUITEMexpandtree() //下面这两个函数 展开树的所有节点{    // TODO: Add your command handler code here     MyExpandTree(m_tree.GetRootItem()); } void CTreeControlDlg::MyExpandTree(HTREEITEM hTreeItem){    if(!m_tree.ItemHasChildren(hTreeItem))    {        return;    }    HTREEITEM hNextItem = m_tree.GetChildItem(hTreeItem);    while (hNextItem != NULL)    {        MyExpandTree(hNextItem);        hNextItem = m_tree.GetNextItem(hNextItem, TVGN_NEXT);    }    m_tree.Expand(hTreeItem,TVE_EXPAND);}

接着,添加icon图标资源,导入三个ico图标


最后编译运行。

运行结果如下


运行程序exe链接

http://download.csdn.net/detail/zhangxiaoyu_sy/9914408