MFC树控件入门实例讲解

MFC树控件入门实例讲解

2023年7月18日发(作者:)

灵创策华郑成龙(QQ:120952389)

MFC树控件的简单入门

本文简单介绍了有关MFC中树形控件的最基本的用法,鉴于水平有限,仅希望能够读者通过简单的编程实例,起到对树形控件入门之目的。因为笔者对MFC知识点的学习也都是从实例中学习,这样效率会相对较高,好了不说废话了,开始…

1. 新建一名为“MyTree”的对话框(Dialog based)应用程序项目(MFC

AppWizard(EXE)),编译完成后效果如下:

图1

2. 删除对话框中的静态文本控件,并添加Tree Contrl控件和三个

Button控件,各控件属性见下表,完成效果如下:

表1

序号 属性 内容 备注

1 树形控件 IDC_TREE

2 按钮控件 IDC_BTN_INITIAL 初始化操作

3 按钮控件 IDC_BTN_DELETE 删除一个节点

4 按钮控件 IDC_BEN_CLEAR 删除全部节点

来日方长显身手,干撒热血写春秋

灵创策华郑成龙(QQ:120952389)

图2

3. 在对话框中的树型控件上右键添加CTreeCtrl类的变量m_treeCtrl,此时在类视图中的CMyTreeDlg类中增加了私有变量m_treeCtrl。

4. 在初始化按钮上双击,在其初始化处理函数内添加一些代码,完成初始化工作,初始化工作主要实现树型控件内各个节点的添加工作,此时先在MSDN中找到CTreeCtrl类的(member)成员,依次参考Create/等成员函数,可参考下面代码:

void CMyTreeDlg::OnBnClickedBtnInitial()

{

//添加根节点

HTREEITEM root = m_Item(_T("root"));

//添加两个父节点

HTREEITEM parent1 = m_Item(_T("parent1"));

HTREEITEM parent2 = m_Item(_T("parent2"));

//为父节点添加子节点,child2在child1之后

来日方长显身手,干撒热血写春秋

灵创策华郑成龙(QQ:120952389)

HTREEITEM child1 = m_Item(_T("child1"),parent1);

HTREEITEM child2 = m_Item(_T("child2"),parent1,child1);

HTREEITEM child3 = m_Item(_T("child3"),parent1,child2);

HTREEITEM child11 = m_Item(_T("child11"),parent2);

HTREEITEM child22 = m_Item(_T("child22"),parent2,child11);

HTREEITEM child33 = m_Item(_T("child33"),parent2,child22);

}

5. 此时运行程序,多次点击初始化出现以下界面:

图3

此时我们发现两处不足(bug): 一是每次点击初始化按钮就出现一个树结构,实际上我们需要的是一组树结构,不应该重复相同的树结构;二是图中显示的树结构,父节点与子节点之间没有连线,看起来不直观,需要修改树控件的类型(style)。

解决第一个 bug的方法是:在CMyTreeDlg中定义一个BOOL型变量m_result, 该变量初始化为FALSE, 对上述代码进行如下修改:实现点击一次初始化按钮,显示树结构;再次点击将把所有节点删除的效用!

来日方长显身手,干撒热血写春秋

灵创策华郑成龙(QQ:120952389)

解决第二个bug的方法是:由于树型控件类继承了窗口类CWnd,所以可以利用CWnd类中的ModifyStyle()函数,可以修改树控件的style,使其拥有连线功能,同时我们还增添了button以及连线颜色、背景颜色的设置,算是买一送一吧!具体修改后的代码及界面显示如下(真是人配衣裳马配鞍,狗配铃铛跑得欢啊!):

void CMyTreeDlg::OnBnClickedBtnInitial()

{

//因为在对话框中已经定义了树形控件变量,该控件在对话框生成时,就已经调用树形类的create函数,完成了初始化工作;因此如果想修改树形控件的stytle需要调用Modify

if (FALSE == m_result)

{

//修改树控件style

m_Style(0,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS);

//增加了控件颜色修改

m_eColor(RGB(120,100,0));

m_olor(RGB(73,169,51));

m_tColor(RGB(255,0,0));

//添加根节点

HTREEITEM root = m_Item(_T("root"));

//添加两个父节点

HTREEITEM parent1 = m_Item(_T("parent1"));

HTREEITEM parent2 = m_Item(_T("parent2"));

//为父节点添加子节点

HTREEITEM child1 = m_Item(_T("child1"),parent1);

HTREEITEM child2 = m_Item(_T("child2"),parent1,child1);

HTREEITEM child3 = m_Item(_T("child3"),parent1,child2);

HTREEITEM child11 = m_Item(_T("child11"),parent2);

HTREEITEM child22 = m_Item(_T("child22"),parent2,child11);

HTREEITEM child33 = m_Item(_T("child33"),parent2,child22);

m_result = TRUE;

}

来日方长显身手,干撒热血写春秋

灵创策华郑成龙(QQ:120952389)

else

{

m_AllItems();

m_result =FALSE;

}

}

图4

6. 在对话框资源中双击删除一个节点按钮,添加删除一个节点的功能函数。此时我们有两步要做,删除一个节点,我们用到CTreeCtrl类中的DeleteItem()成员函数,第二步,我们要确定那个节点被选中,此时用到GetSeletedItem()成员函数,参考两个函数的MSDN中的例子,我们可以轻松实现删除一个节点功能,代码如下:

void CMyTreeDlg::OnBnClickedBtnDelete()

{

//选择节点

HTREEITEM hItem = m_ectedItem();

来日方长显身手,干撒热血写春秋

灵创策华郑成龙(QQ:120952389)

if ((hItem != NULL))

{

m_Item(hItem);

}

}

7. 依照前面两部分内容,有关删除全部节点的功能, 还有难度吗?其实我们前面在初始化时已经提前引入了有关删除全部节点的函数!她是…? O(∩_∩)O~,想必此时的你对树形控件的使用已经有感觉了吧!

图5

水滴穿石,贵在持之以恒

来日方长显身手,干撒热血写春秋

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689609918a270351.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信