CTreeCtrl 与 CTreeView

CTreeCtrl 与 CTreeView

(一)树控制的主要功能 树控件和视图(Tree Control&View)主要用来显示具有一定层次结构的数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择

 

MFC 提供了两个封装树控件 (Tree Control) 的类:CTreeCtrlCTreeView。每类应用于不同的情况。

当需要纯子窗口控件时(比如在对话框中),使用 CTreeCtrl 类。如果窗口中还有其他子控件,正如在典型的对话框中那样,这时尤其需要使用CTreeCtrl 类。

如果希望树控件 (Tree Control) 不仅作为树控件 (Tree Control) 而且作为文档/视图结构中的视图窗口存在,则使用 CTreeView 类。CTreeView 类占有框架窗口或拆分窗口的整个工作区。它的大小随父窗口大小的调整而自动调整,并且它可以处理来自菜单、快捷键和工具栏的命令消息。因为树控件 (Tree Control) 包含显示树所需的数据,所以相应的文档对象不必太复杂,甚至可以在文档模板中使用CDocument 作为文档类型。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

MFC中CTreeCtrl类的一些基本用法

  树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。CTreeCtrl类封装了树形控件的各种操作。在树形控件中每一个结点都有一个HTREEITEM句柄,这个句柄按我的理解其实就是一些十六进制的数,就是用来标识的ID。但是我们通常添加到树形结构的结点都是一些图标或者字符串,这时可以调用:
    CString CTreeCtrl::GetItemText(HTREEITEM hItem);
来获得句柄为hItem的显示字符。同理:
    BOOL CTreeCtrl::SetItemText( HTREEITEM hItem, LPCTSTR lpszItem );
来将句柄为hItem的显示字符设置为lpszItem 。
    一般我们创建了一个树形控件之后就要对这个控件添加结点,CTreeCtrl类提供了一个函数:
    HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );
来帮助我们,这个函数的返回值是新添加结点的HTREEITEM句柄,函数的参数lpszItem是要添加结点的显示字符,hParent代表父结点的句柄,默认为根节点,当前添加的结点会排在hInsertAfter表示的结点的后面,默认是添加在最后。利用这个方法我们可以递归添加无穷的结点。下面的代码会建立一个如下形式的树形结构:
+--- Parent1
    +--- Child1_1
    +--- Child1_2
    +--- Child1_3
+--- Parent2
+--- Parent3

    HTREEITEM hItem,hSubItem;
    hItem = m_tree.InsertItem("Parent1",TVI_ROOT);在根结点上添加Parent1
    hSubItem = m_tree.InsertItem("Child1_1",hItem);//在Parent1上添加一个子结点
    hSubItem = m_tree.InsertItem("Child1_2",hItem,hSubItem);//在Parent1上添加一个子结点,排在Child1_1后面
    hSubItem = m_tree.InsertItem("Child1_3",hItem,hSubItem);

    hItem = m_tree.InsertItem("Parent2",TVI_ROOT,hItem);   
    hItem = m_tree.InsertItem("Parent3",TVI_ROOT,hItem);

此外如果想遍历树可以使用下面的函数:
    HTREEITEM GetRootItem( );得到根结点。
    HTREEITEM GetChildItem( HTREEITEM hItem );得到子结点。
    HTREEITEM GetPrevSiblingItem/GetNextSiblingItem( HTREEITEM hItem );得到指明结点的上/下一个兄弟结点。
    HTREEITEM GetParentItem( HTREEITEM hItem );得到父结点。

你可能感兴趣的:(CTreeCtrl 与 CTreeView)