分享

VC树形控件控件(基础)

 牛人的尾巴 2015-06-15

2009-12-30 20:56:38

树形控件是一种可以分级显示项目列表的窗口,其所含项目以相互关联的方式显示在控件中,通过点击位于某个层次的项目 节点可以展开下一层次中从属于该节点的所有项目。树形控件非常适合于管理那些层次较多且相互间隶属关系较为清晰的项目元素。在MFC中,由 CTreeCtrl类提供了对树形控件的功能支持。

  在用Create()创建了一个树形控件后可以用SetImageList()函 数为其设置一个图象列表,这样就可以在树形控件中为各个层次的项目设置图标。通过InsertItem()函数可以为其添加数据项,返回的 HTREEITEM类型的句柄唯一标识了此添加的项目。该句柄应当妥善保管,只有通过该句柄才能为此项目继续添加子项目。如果在创建子窗口时指定父窗口句 柄为NULL,则将直接在根目录创建项目。下面这段代码将通过上述函数创建一个树形控件并向其添加二个层次的项目:

// 创建一个树形控件

m_ctrTreeCtrl.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | TVS_EDITLABELS, CRect(500, 50, 670, 200),this, IDC_TREE1);

……

TV_ITEM tvItem;

TV_INSERTSTRUCT tvInsert;

tvItem.mask = TVIF_TEXT; // 指定pszText成员可用

tvItem.pszText = "Item0"; // 根项目显示的字符

tvInsert.hParent = TVI_ROOT; // 指定父句柄

tvInsert.item = tvItem; // 指定TV_ITEM结构对象

tvInsert.hInsertAfter = TVI_LAST; // 项目插入方式

// 创建根项目,当前项目句柄保存于hItem0中

HTREEITEM hItem0 = m_ctrTreeCtrl.InsertItem(&tvInsert);

……

// 在根项目下继续创建第二层项目

tvItem.mask = TVIF_TEXT;

tvItem.pszText = "SubItem0";

tvInsert.hParent = hItem0;

tvInsert.item = tvItem;

tvInsert.hInsertAfter = TVI_LAST;

HTREEITEM hItem3 = m_ctrTreeCtrl.InsertItem(&tvInsert);

  作为同用户的接口,树形控件将在不同的动作下发出各种通知消息,可以在控件窗口的消息映射中添加ON_NOTIFY_REFLECT宏或是在控件所在父窗口的消息映射中添加ON_NOTIFY宏来为每一个通知消息指定处理函数。

   树形控件中的任何一个项目均可以拥有一个子项目列表,此列表可以随时处于展开或缩起状态。当处于展开状态时,对应的子项目将以缩进方式显示在父项目下; 当处于缩起状态时,子项目将不显示。当用户在双击父项目时,相应的子项目列表将自动在展开与缩起状态切换。在子项目列表状态发生改变时和状态改变完成后树 形控件将分别发出TVN_ITEMEXPANDING和 TVN_ITEMEXPANDED通知消息。关于其它的通知消息及其具体含义可参见下表:

通知消息

消息说明

TVN_BEGINDRAG

开始拖拽操作

TVN_BEGINLABELEDIT

开始编辑标签

TVN_BEGINRDRAG

开始鼠标右键拖拽操作

TVN_DELETEITEM

删除一个指定的项目

TVN_ENDLABELEDIT

结束编辑标签

TVN_GETDISPINFO

获取一个项目的显示信息

TVN_ITEMEXPANDED

子项目列表被展开或收起

TVN_ITEMEXPANDING

子项目列表正将展开或收起

TVN_KEYDOWN

键盘事件

TVN_SELCHANGED

项目的选择发生改变

TVN_SELCHANGING

项目的选择将要发生改变

TVN_SETDISPINFO

通知更新一个项目的信息

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多