积累

—每天进步一点 再烦,也别忘微笑;再急,也要注意语气; 再苦,也别忘坚持;再累,也要爱自己。 人生四项基本原则:懂得选择,学会放弃,耐得住寂寞,经得起诱惑。 我不去想是否能够成功,既然选择了远方便只顾风雨兼程;我不去想能否赢得爱情,既然钟情于玫瑰就勇敢地吐露真诚;我不去想身后会不会袭来寒风冷雨,既然目标是地平线留给世界的只能是背影;我不去想未来是平坦还是泥泞,只要热爱生命/一切,都在意料之中。 ——“人生有三大诱惑,能够克服这三大诱惑的人,无论成就如何都可以尊称一声伟人。 ——第一诱惑,少年时贪玩,荒废了学业没打下扎实的基础。 ——第二诱惑,青年时贪情,在朋友和情人面前迷失了自我。 ——第三诱惑,中年时贪功,躺在功劳簿上骄傲自满的犯懒。”

C++博客 联系 聚合 管理
  18 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks
1.树形控件的定义:
树形控件是一种可以分级显示项目列表的窗口,其所含项目以相互关联的方式显示在控件中,通过点击位于某个层次的项目节点可以展开下一层次中从属于该节点的所有项目。树形控件非常适合于管理那些层次较多且相互间隶属关系较为清晰的项目元素。在MFC中,由CTreeCtrl类提供了对树形控件的功能支持。
代码中控件的定义:
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的专用风格:

TVS_HASLINES 在父/子结点之间绘制连线
TVS_LINESATROOT 在根/子结点之间绘制连线
TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开
TVS_EDITLABELS 结点的显示字符可以被编辑
TVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
TVS_DISABLEDRAGDROP 不允许Drag/Drop
TVS_NOTOOLTIPS 不使用ToolTip显示结点的显示字符

数据结构:树形控件的数据结构 
成员方法: 

SetImageList()设置与树视控件关联的图像列表
 GetCount()返回控件中项目的数量
GetSelectedItem()返回当前选中的项目
GetNextItem()获得满足某种条件的项目
GetChildItem()GetParentItem()返回一个项目的子项目或父项目
GetNextSiblingItem()GetPrevSiblingItem()返回下一个或上一个兄弟项
GetRootItem()返回根项目
GetItemText()SetItemText()用于获取或设置项目的文本串
GetItemData()SetItemData()获得或设置项目的关联数据

InsertItem()插入一个项目

HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄。

通过InsertItem()函数可以为其添加数据项,返回的HTREEITEM类型的句柄唯一标识了此添加的项目。该句柄应当妥善保管,只有通过该句柄才能为此项目继续添加子项目。
DeleteItem()删除一个项目
DeleteAllItem()删除所有项
Expand()展开或者折叠项目

2.使用步骤:
 

开花->结果

 过程:

1.       通过获得树的风格,同时定义新的树的风格,设置树的新的风格

2.       定义HTreeItem 数据

HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄。

HTREEITEM hitem,hsubitem;
hitem = m_CTreeCtrl.InsertItem("root",TVI_ROOT)
hsubitem = m_CTreeCtrl.InsertItem("test",hitem);
hitem = m_CTreeCtrl.InsertItem("parent",TVI_ROOT,hitem); 
hitem = m_CTreeCtrl.InsertItem("parent02",TVI_ROOT);
hsubitem = m_CTreeCtrl.InsertItem("chid01",hitem);
hsubitem = m_CTreeCtrl.InsertItem("chid02",hitem,hsubitem);

 

  把果实做好,再嫁接到树枝上

      HTREEITEM hRoot,hCur;//树控制项目句柄
      TV_INSERTSTRUCT TCItem;//
插入数据项数据结构
    
TCItem.hParent=TVI_ROOT;//增加根项
      TCItem.hInsertAfter=TVI_LAST;//
在最后项之后
      TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDI          MAGE;//
设屏蔽
      TCItem.item.pszText="
数据选择";
      TCItem.item.lParam=0;//
序号
      TCItem.item.iImage=0;//
正常图标
      TCItem.item.iSelectedImage=1;//
选中时图标
      hRoot=m_TreeCtrl.InsertItem(&TCItem);//
返回根项句柄

3.树形控件的消息映射:
作为同用户的接口,树形控件将在不同的动作下发出各种通知消息,可以在控件窗口的消息映射中添加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 通知更新一个项目的信息

4.举例:

控件使用举例

只是做了个草稿是第一次做,新手。欢迎高手拍砖。











 

posted on 2009-02-09 15:34 起点(每天进步一点) 阅读(5235) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理