树形控件CTreeCtrl的使用

树形控件在界面编程中应用十分普遍,如在资源管理器中和树形结构显示书的文件夹等,我们一步步研究树形控件的使用。

在对话框界面上首先拖动创建一个树,一般我们改变三个属性:

Has Buttons显示带有”+”或”-“的小方框,表示某项是否能被展开或已展开,默觉得选中,我们改为选中。

Has Lines在父项与子项之间连线以清楚地显示结构,默觉得选中,改为选中。

Lines at root:在根部划线,默觉得选中,改为选中。

其余依据须要,能够改动,如Always show slection,Edit labels

接下来就要按我们的须要显示内容了,请看经常使用函数:

改变节点函数:

插入树节点:HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage,int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST)

lpszItem为项的名称,nImage为位图序列的索引,nSelectedImage为选中项的位图序列索引,hParent为插入项的父项,假设为TVI_ROOT或NULL,则插入树的最高层,hInsertAfter取值为TVI_FIRST,TVI_LAST,TVI_SORT。

删除树节点:BOOL DeleteItem(HTREEITEM hItem)

删除全部树节点:BOOL DeleteAllItems()

扩展节点:BOOL Expand(HTREEITEM hItem, UINT nCode),nCode是一个标志,指定了函数运行的操作,能够是TVE_COLLAPSE(折叠),TVE_COLLAPSERESET(折叠并移走全部的子项),TVE_EXPAND(展开),TVE_TOGGLE(在展开和折叠状态之间反转).

遍历树节点相关函数:

HTREEITEM GetRootItem() const;

HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const

HTREEITEM GetChildItem(HTREEITEM hItem) const

HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const

HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const

HTREEITEM GetParentItem(HTREEITEM hItem) const

HTREEITEM GetFirstVisibleItem() const

HTREEITEM GetNextVisibleItem(HTREEITEM hItem) const

HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) const

HTREEITEM GetLastVisibleItem() const

获取设置节点标题:

CString GetItemText(_In_ HTREEITEM hItem) const;

BOOL SetItemText(_In_ HTREEITEM hItem, _In_z_ LPCTSTR lpszItem);

获得或设置选择的节点:

HTREEITEM GetSelectedItem() const

BOOL SelectItem(HTREEITEM hItem)

是否有子节点:BOOL ItemHasChildren(_In_ HTREEITEM hItem) const;

检測点是否在树节点区域:HTREEITEM HitTest(_In_ CPoint pt, _In_opt_ UINT* pFlags = NULL)const;

推断是否是否最顶层节点用GetParentItem(hItem)== NULL

树节点右键单击菜单的实现,先重载右键单击函数,然后分别实现对应菜单的功能:

void C**Dlg::OnNMRClickTree1(NMHDR *pNMHDR, LRESULT *pResult)

{

// TODO: 在此加入控件通知处理程序代码

CPoint pt;

GetCursorPos(&pt);

m_Tree.ScreenToClient(&pt);

HTREEITEM hCurItem = m_Tree.GetSelectedItem();

//推断右键的位置处是否是树形控件的一个节点

//若有,则弹出右键菜单

HTREEITEM  hItem = m_Tree.HitTest(pt);

if (hItem == NULL)

{

m_Tree.SelectItem(NULL);

}

else if (hCurItem != hItem)

{

m_Tree.SelectItem(hItem);

}

m_Tree.ClientToScreen(&pt);

CMenu menu;

if (menu.LoadMenuA(IDR_MENU1))

{

CMenu* pMenu = menu.GetSubMenu(1);

if (pMenu != NULL)

{

pMenu->TrackPopupMenu(TPM_LEFTALIGN, pt.x, pt.y, this);

pMenu->DestroyMenu();

*pResult = 1;

return;

}

}

*pResult = 0;

}

实现树节点的多选和拖动须要派生一个新类,在此不再详写了。

时间: 2024-10-06 17:16:05

树形控件CTreeCtrl的使用的相关文章

MFC控件:树形控件(CTreeCtrl)

树形控件划分: 根节点:所有都收缩后的节点 节点:    能展开 叶: 不能展开 说明: 节点和叶不是绝对的划分,当在对叶添加新下属后,该叶变为节点 树形控件添加: 节点结构体: HTREEITEM ,用该结构体声明节点变量 为控件添加项: HTREEITEM InsertItem( LPCTSTR lpszItem, //项名 int nImage, //树视图控件图像列表中的项的图像的索引 int nSelectedImage, //树视图控件图像列表中的项的所选图像的索引 HTREEITE

树形控件简单样例

此实例实现的功能:在一个树形控件中显示鸡啄米站点的简单结构分层,共同拥有三层.分别为鸡啄米站点.各个分类和文章.用鼠标左键单击改变选中节点后.将选中节点的文本显示到编辑框中.以下是详细实现步骤: 1. 创建一个基于对话框的MFCproject,名称设置为"Example31". 2. 在自己主动生成的对话框模板IDD_EXAMPLE31_DIALOG中,删除"TODO: Place dialog controls here."静态文本框."OK"

Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置

QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有mvc的特点). 1. QStandardItemModel在QTreeView中的使用 使用QTreeView的对应模型是QStandardItemModel,这个是Qt对应ui界面最有用的模型,它可以用于树形控件.列表控件.表格控件等等和条目有关的控件.QStandardItemModel用于列表

树控件CTreeCtrl 创建与双击响应

函数功能:创建一个树控件,并实现双击节点响应事件. 响应方法:在树控件上增加双击响应事件. 代码: 1.在OnInitDialog中:   CTreeCtrl *ctreectrl = (CTreeCtrl *)GetDlgItem(IDC_TREE1);  //调用ModifyStyle方法修改数控件Sytle  ctreectrl->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);  //设置树控件字体颜色  ct

树形控件简单例子

此实例实现的功能:在一个树形控件中显示鸡啄米网站的简单结构分层,共有三层,分别为鸡啄米网站.各个分类和文章.用鼠标左键单击改变选中节点后,将选中节点的文本显示到编辑框中.下面是具体实现步骤: 1. 创建一个基于对话框的MFC工程,名称设置为"Example31". 2. 在自动生成的对话框模板IDD_EXAMPLE31_DIALOG中,删除"TODO: Place dialog controls here."静态文本框."OK"按钮和"

win32 sdk树形控件的项拖拽实现

本课中,我们将学习如何使用树型视图控件.另外还要学习如何在树型视图中完成拖-拉动作,以及如何使用图象列表. 理论: 树型视图是一种特别的窗口,我们可以使用它一目了然地表示某种层次关系.譬如象在资源管理器中左边窗口中的就是树型视图.您可以调用CreateWindowEx来创建树型视图,传递一个类名""SysTreeView32"",或者您也可以把它放到一个对话框中去.不要忘了在您的代码中加入InitCommonControls函数. 树型视图有几种特有的风格.下面是几

Web应用程序开发,基于Ajax技术的JavaScript树形控件

感谢http://www.cnblogs.com/dgrew/p/3181769.html#undefined 在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项. 目前市场上常见的JavaScript框架及组件库中均包含自己的树形控件,例如jQuery.Dojo.YUI.Ext JS等,还有一些独立的树形控件,例如dhtmlxTree等,这些树形控件完美的解决了层次数据的展示问题. 展示离不开数据,树形控件主要

共有21款 jQuery 树形控件开源软件,第1页

JQuery Tree 插件 zTree zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 支持 JSON 数据 支持一次性静态生成 和 Ajax 异步加载 两种方式 支持多种事件响应及反馈 支持 Tree...更多zTree信息 最近更新: [每日一博]Ztree+PHP 无限极节点递归查找节点 发布于 1年前 jQuery的Tree控件 jstree j

zTree 树形控件 ajax动态加载数据

很久没搞过树形控件了 , 再次接触看官网文档有点没懂,于是在网上找了个代码copy上,但数据是写死的,就想这在用ajax异步取出数据替换,下面是js代码 <SCRIPT type="text/javascript" > //定义全局ztree数据 var zNodes; /* 初始化ztree数据 */ function initZtree(){ $.ajax({ type: "GET", url: "<%=request.getCont