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条)