VCMFC中TREE树控件的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC中树控件的使用
树控件可以对数据进行分层显示。在树控件中,除根节点以外,每个节点都有一个父节点,可以拥有多个兄弟节点和子节点,从而可以是数据以梳妆结构清晰的显示出来。(树控件图标)
一.创建树控件
BOOL Create(DWORD dwStyle , const RECT & rect , CWnd * pParentWnd ,UINT nID);
dwStyle 控件的风格rect 控件显示区域
pParantWnd 父窗口指针nID 命令ID值
dwStyle中可以使用以下一些树形控件的专用风格:
TVS_HASLINES 在父/子结点之间绘制连线
TVS_LINESATROOT 在根/子结点之间绘制连线
TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开
TVS_EDITLABELS 结点的显示字符可以被编辑
TVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点TVS_DISABLEDRAGDROP 不允许Drag/Drop
TVS_NOTOOLTIPS 不使用ToolTip显示结点的显示字符
树控件通常和图像列表控件一起使用,在树控件中可以显示图像列表中的图标,即为树控件添加图标。
CImageList * SetImageList(CImageList * pImageList , int nImageListType);
pImageList 标识图像列表控件指针
nImageListType 标识图像列表类型
Eg.
m_Tree.Create(TVS_LINESATROOT|TVS_HASLINES|TVS_H ASBUTTONS|WS_BORDER);
......
m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,0);
......
m_Tree.SetImageList(&m_ImageList , LVSIL_NORMAL); 二.向树控件中插入数据
在树形控件中每一个结点都有一个句柄(HTREEITEM),同时添加结点时必须提供的参数是该结点的父结点句柄。
格式:
1.HTREEITEM insertItem(LPTVINSERTSTRUCT lpInsertStruct); lpInsertStruct
LPTVINSERTSTRUCT结构指针,LPTVINSERTSTRUCT结构中包含了插入操作的详细信息。
2.HTREEITEM insertItem(UINT nMask ,LPCTSTR lpszItem ,int nImage ,int nSelectdeImage ,UINT nState ,UINT nStateMask , LPARAM
lParam ,HTREEITEM hParent ,HTREEITEM hInsertAfter);
nMask 节点的哪些信息被设置lpszItem 节点的文本
nImage 节点的图像索引nSelectdeImage 节点状态
nSelectdeImage 节点选中时的图标索引
nStateMask 节点的哪些状态被设置
lParam 指定关联节点的附加信息hParent 父节点句柄
hInsertAfter 新插入节点后面的节点句柄
3. HTREEITEM insertItem(LPCTSTR lpszItem ,HTREEITEM hParent =TVI_ROOT, HTREEITEM hInsertAfter=TVI_LAST);
4. HTREEITEM insertItem(LPCTSTR lpszItem , int nImage ,int nSelectedImage ,HTREEITEM hParent =TVI_ROOT,HTREEITEM hInsertAfter=TVI_LAST);
三.展开或收缩树控件节点
BOOL Expand(HTREEITEM hItem ,UINT nCode);
hItem 展开的节点句柄
nCode 展开的动作
TVE_COLLAPSE: 收缩所有节点
TVE_COLLAPSERESET: 收缩节点,移除子节点
TVE_EXPAND: 展开所有节点
TVE_TOGGLE: 展开或收缩当前节点
四.删除节点
BOOL DeleteItem(HTREEITEM hItem);
hItem 是删除节点的句柄
BOOL DeleteAllItem(); 删除所有节点
为了掌握上述的使用方法,下面举例说明:
创建树控件
步骤:
1.创建一个基于对话框的应用程序,声明一个CTreeCtrl类变量m_Tree及一个图像列表对象m_ImageList, 向工程中导入想要显示的图标资源。
2.在OnInitDialog()函数中输入如下程序
m_Tree.Create(TVS_LINESATROOT|TVS_HASLINES|TVS_HASBUTTONS| WS_BORDER|LVS_SHOWSELALWAYS,CRect(0,0,0,0),this,10001);
//创建树控件
m_Tree.MoveWindow(10,10,300,200); //设置树控件显示位值
m_Tree.ShowWindow(SW_SHOW); //显示控件
//当已经在对话框中添加数控件并设置完成时,不用写以上三句m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,0);
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
.......................................//此处省略向图像列表中添加图标,图标个数由编程者决定
m_Tree.SetImageList(&m_ImageList , LVSIL_NORMAL);
HTREEITEM m_Root;
m_Root=m_tree.InsertItem("根节点想输入的文本",0,0); //根节点
HTREEITEM m_Child;
m_Child=m_tree.InsertItem("根节点下的子节点" ,0,0, m_Root );