MFCVC中TreeView全面解析

上传人:pu****.1 文档编号:484054791 上传时间:2023-12-09 格式:DOCX 页数:11 大小:21.58KB
返回 下载 相关 举报
MFCVC中TreeView全面解析_第1页
第1页 / 共11页
MFCVC中TreeView全面解析_第2页
第2页 / 共11页
MFCVC中TreeView全面解析_第3页
第3页 / 共11页
MFCVC中TreeView全面解析_第4页
第4页 / 共11页
MFCVC中TreeView全面解析_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《MFCVC中TreeView全面解析》由会员分享,可在线阅读,更多相关《MFCVC中TreeView全面解析(11页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! 窗体顶端窗体底端MFC VC 中 TreeView 全面解析 2011-11-29 14:07:51标签:VC TreeView MFC 休闲 职场 (一)树控制的主要功能树控制和视(Tree Control&View)主要用来显示具有一定层次结构的数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择。树控制中的每个数 据项包括数据项名称的文本字符串和用于表示该数据项的图像,每个数据项下面均可包含各种子项,整个结构就象目录树一样。对于包含各种子项的数据项,可通过 鼠标双击来展开或合拢,这可以通过控制树的不同风格来实现树控制的不同显示形态

2、。这些风格主要包括:TVS_HASLINES表示用连线来连接父项和它下面的各个子项,这可以使树的显示层次结构更加清晰,但在无父项的各子项之间并没有连线;TVS_LINESATROOT表示在无父项的各子项即根下面的各子项之间存在连线;TVS_HASBUTTONS表示在带有子项的父项前面增加一个带“”或“”的按钮,这使得用户也可以通过单 击这个小按钮来实现子项的展开和合拢,当存在子项时,按钮的初始状态为“”,当子项被展开时,按小按钮由“”变为“”号,当子项合拢时,小按钮由 “”变为“”号,这一风格同样对于根项无效,如果需要可通过组合TVS_LINESATROOT风格来实现;TVS_EDITLABE

3、LS表示允许让用户单击具有输入焦点的数据项来修改其名称。对于树控制,MFC中也以两种形式来封装,即树控制(CTREECTRL)和树视(CTREEVIEW),来满足 用户的不同需求,对于一般要求的用户如在对话框中应用,使用树控制比较方便,而对于具有较高要求的用户,在使用树视时还具有视窗口的各种方便特性,可以更 好地满足文档视结构的要求。当在窗口中使用树视时,树视会占满两个窗口的客户区域并自动随窗口的框架结构的调整而调整,并能够很好地处理诸如菜单、加速 键和工具条中的各种命令消息。在使用树视时只要利用其成员函数CtreeView取得其一个引用,就可以象树控制一样方便地应用:CtreeCtrl &t

4、reeCtrl = GetTreeCtrl()。(二)树控制的对象结构1、树控制的建立方法CtreeCtrltreeCtrl 建立树控制对象结构Create 建立树控制并绑定对象树控制CTreeCtrl:Create的调用格式如下:BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );其中参数dwStyle用来确定树控制的类型;rect用来确定树控制的大小和位置;pParentWnd用来确定树控制的父窗口,通用是一个对话框并且不能为NULL;nID用来确定树控制的标识。树控制的风格可以是下列值的组合

5、:TVS_HASLINES 表示树控制在各子项之间存在连线;TVS_LINESATROOT 表示树控制在根项之间存在连线;TVS_HASBUTTONS 表示树控制视在父项左侧存在展开合拢控制按钮;TVS_EDITLABELS 表示可以控制鼠标单击修改树项的名称;TVS_SHOWSELALWAYS 表示选中项即使在窗口失去输入焦点时仍然保持选中状态;TVS_DISABLEDRAGDROP表示禁止树控制发送TVN_BEGINDRAG消息2、树控制的属性类树控制属性类包括取得树控制中项数GetCount、取得树控制中项相对于父项的偏移值GetIndent、取得 树控制图像列表控制句柄GetImage

6、List、设置树控制图像列表控制句柄SetImageList、取得匹配下一个树项GetNextItem、判 断给定树项是否包含子项ItemHasChildren、取得树项子项GetChildItem、取得下一个同属树项 GetNextSiblingItem、取得前一个同属树项GetPrevSiblingItem、取得父树项GetParentItem、取得第一个可 视树项GetFirstVisibleItem、取得下一个可视树项GetNextVisible Item、取得前一个可视的树项GetPrevVisibleItem、取得被选中的树项GetSelectedItem、取得根树项 GetRoo

7、tItem、取得树项的属性GetItem、设置树项的属性SetItem、取得树项的状态GetItemState、设置树项的状态 SetItemState、取得与树项关联图像GetItemImage、设置与树项关联图像SetItemImage、取得树项文本 GetItemText、设置树项文本SetItemText和取得树项编辑控制句柄GetEditControl等。3、树控制的操作方法树控制的操作方法包括插入一个树项InsertItem、删除一个树项DeleteItem、删除所有树项 DeleteAllItems、展开或合拢树项的子项Expand、选中特定树项SelectItem、选择一个树项

8、作为第一个可视树项 SelectSetFirstVisible、编辑一个可视的树项EditLabel和排序给定父树项的子树项SortChildren等。(三)树控制的数据结构在使用树控制时需要了解两个个非常重要的数据结构TV_ITEM和TV_INSERTSTRUCT,前一个数据结 构是用来表示树控制的树项信息,后一个数据结构是用来定义将树项增加到数据控制中所需要的数据内容。另外,还需要NM_TREEVIEW、 TV_DISPINFO和TV_HITTESTINFO三个数据结构,这几个数据结构的定义方法如下:基本数据项结构typedef struct _TV_ITEM UINT mask; /结构

9、成员有效性屏蔽位HTREEITEM hItem; /数据项控制句柄UINT state; /数据项状态UINT stateMask; /状态有效性屏蔽位LPSTR pszText; /数据项名称字符串int cchTextMax; /数据项名称的最大长度int iImage; /数据项图标索引号int iSelectedImage;/选中数据项图标索引号int cChildren; /子项标识LPARAM lParam; /程序定义的32位数据 TV_ITEM, FAR *LPTV_ITEM;插入树项结构typedef struct _TV_INSER TSTRUCT HTREEITEM hP

10、arent; /父项控制句柄HTREEITEM hInsertAfter; /插入树项的位置TV_ITEM item; /数据项的结构 TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;其中插入的位置如果是TVI_FIRST 或TVI_LAST ,则分别插入到树控制的最前面或最后面,如果是TVI_SORT ,则插入的树项自动插入到合适的位置。树控制通知消息结构typedef struct _NM_TREEVIEW NMHDR hdr; /通知消息句柄UINT action; /通知消息标志TV_ITEM itemOld; /原来的数据结构TV_ITEM itemN

11、ew; /新的数据结构POINT ptDrag; /拖动指针 NM_TREEVIEW;取得或设置数据结构typedef struct _TV_DISPINFO tvdiNMHDR hdr; /通知消息控制句柄TV_ITEM item; /数据项结构 TV_DISPINFO;指针测试数据结构typedef struct _TVHITTESTINFO tvhtstPOINT pt; /客户区域屏幕坐标指针UINT flags; /存放测试结果的变量HTREEITEM hItem; /测试的数据项结构 TV_HITTESTINFO, FAR *LPTV_HITTESTINFO;其中flags测试结果

12、可以是如下值:TVHT_ABOVE 在客户区域上面TVHT_BELOW 在客户区域下面TVHT_NOWHERE 在客户区域中并在最后一项下面TVHT_ONITEM 在与树项关联的位图或标签内TVHT_ONITEMBUTTON 在与树项关联的按钮上TVHT_ONITEMICON 在与树项关联的位图上TVHT_ONITEMINDENT 在与树项关联的联线上TVHT_ONITEMLABEL 在与树项关联的标签上TVHT_ONITEMRIGHT 在树项的右侧区域中TVHT_ONITEMSTATEICON 在用户定义的状态图标上TVHT_TOLEFT 在客户区域的左侧TVHT_TORIGHT 在客户区域

13、的右侧(四)树控制的应用技巧示例这里仍以基于对话框演示实例来具体介绍树控制及其和图像列表相结构的应用技巧:通过“FILE-NEW-PROJECTS-MFC AppWizard(EXE)”建立名为VCTREE的工程,在建立过程中选择基于对话框(Dialog based)的应用;将对话框中的默认控件删除,并将所有对话框属性中的Language域设置为Chinese(P.R.C.),以使应用程序支持中 文;建立两个图标IDI_PM和IDI_CJ,用来表示图标的选中和非选中状态,对于每个图标都应建立32X32和16X16两种大小,以保证程序的需 要;在对话框窗口中添加树控制对象(TREE CONTRO

14、L),并设置五个按钮“增加删除查看排序关闭”,其对应标识分别如下:控制名称 标题名称 标识符号树控制 IDC_TREECTRL按钮 增 加 IDC_ADD删 除 IDC_DEL查 看 IDC_VIEW排 序 IDC_SORT关 闭 IDOK5、选中树控制控件,选择“VIEW-ClassWizard-Memory Variables。 骺刂艻DC_TREECTRL 引入成员变量,其变量类型为:变量名 种类 变量类型m_TreeCtrl Control CTreeCtrl同时利用“MESSAGES MAP”为各命令按钮增加控制功能函数。6、然后在代码文件VCTREEDlg.CPP中分别加入如下控制

15、代码:(1)在文件开始处增加图像列表定义CImageList Cil1,Cil2;/大小图标像列表(2)在初始化文件开始处增加代码BOOL CVCTREEDlg:OnInitDialog() CDialog:OnInitDialog();./原来其它代码/ TODO: Add extra initialization here/ 此处开始增加代码CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp();/创建图象列表Cil1.Create(16,16,ILC_COLOR,2,2);Cil1.Add(pApp-LoadIcon(IDI_PM);Cil1.Add(pApp-LoadIcon(IDI_CJ);m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL); /设置图象列表DWORD dwStyles=GetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE);/获取树控制原风格dwStyles|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINE

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号