[MFC]CTreeView树形视图、CTreeCtrl树形控件

1. 树形控件和树形视图:

    1) 树形控件在Microsoft Windows95中就已经引入,如文件资源管理器中的树形文件列表就是使用树形控件实现的,这是树形控件最常见的应用;

    2) 树形视图就是将整个树形控件作为视图模板的视图,就和之前做过的Phones列表视图一样,直接将CXXXView继承自CTreeCtrl即可;

    3) 我们看到的资源管理器的左侧其实就是一个子视图,该视图中只包含树形控件,其本质就是一个树形视图;

!!树形视图在多视图中应用非常多,经常将树形视图作为最左侧的子视图用以展示工作空间中各个资源的从属层级关系;


2. 树形视图的本质:

    1) 其实树形视图CTreeView里面就只有两个成员,一个是其构造函数,另一个就是GetTreeCtrl来获取隐藏的(private控制的)的属性控件对象引用;

    2) CTreeView其实就只包含了一个CTreeCtrl成员对象,所有的树形操作都是有该成员对象实现的,所有的相关操作都是调用CTreeCtrl的操作实现的,CTreeView仅仅就是对CTreeCtrl的包装而已;

    3) 想要操作树形控件就必须先使用GetTreeCtrl获得控件引用,然后再调用控件的函数来实现相关操作:CTreeCtrl& CTreeView::GetTreeCtrl() const;


3. 树形视图的初始化:

    1) 树形视图初始化的主要是其外观和功能,而总共有6种样式会影响树形视图的外观和功能;

    2) 6种样式:都以TVS_打头,即Tree View Style的缩写

         i. TVS_HASLINES:具有线段,将子项目和父项目用线连起来;

         ii. TVS_LINESATROOT:将各个根目录用线段连起来(在拿资源管理器来说就是用线段将所有表示盘符的根目录用线连起来),前提是TVS_HASLINES开启时才有效;

         iii. TVS_HASBUTTONS:给具有子项目的项目添加带有加减号的按钮,+表示正处于折叠状态,点击后可以展开,-表示正处于展开状态,点击后可以折叠;

         iv. TVS_EDITLABELS:开启项目文本编辑通知,有些应用(特别是Windows资源管理器)直接允许在树形空间中修改文件名,可以是双击图标将文件名设置成可编辑状态,编辑完成之后再双击图标或者点击其它任意位置就可以保存并结束编辑,随即文件名修改成功;

!!开始编辑时会发出TVN_BEGINLABELEDIT通知,结束时会发出TVN_ENDLABELEDIT通知;

!!而TVS_EDITLABELS样式决定这两种通知是否可以发送,如果添加则表示可以发送这两种通知,如果不添加则关闭这两种通知的发送功能;

         v. TVS_DISABLEDRAGDROP:关闭拖放效果,默认情况下拖放效果是一直打开着的,有时可以将一些东西用鼠标拖放到树形控件的项目中去,比如在Windows资源管理器中,可以将某个文件的图标拖放到树形控件的某个文件夹上,就可以达到将文件移动到该文件夹的目的;

         vi. TVS_SHOWSELALWAYS:让加亮显示的选中项目始终被加亮显示(树形控件默认当前选中的项目被加亮显示),默认状态下,当树形控件失去输入焦点时加亮显示会被取消;

    3) 在哪里初始化呢?在CTreeView的PreCreateWindow的CREATESTRUCT的style字段中使用位或添加,例如:

BOOL CMyTreeView::PreCreateWindow(CREATESTRUCT& cs)
{
	if (!CTreeView::PreCreateWindow (cs))
		return FALSE;

    cs.style |= TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS |
        TVS_SHOWSELALWAYS;
	return TRUE;
}


3. 树形控件和图形列表控件简介:

    1) 树形控件是MFC的公用控件的一种(即高级控件),其它公用控件还有微调杆、进度条、IP地址栏等;

    2) 树形控件最大的特点就是用文本字符串和图形来表示每个项目,文本字符串非常好设定,可以直接在InsertItem中传给字符串参数后者直接使用SetItemText等函数设置,但是图形的设置就比较麻烦了;

    3) 图形的设置:由于树形控件中的项目通常很多,项目的类型通常也很多,因此也需要很多不同的图形来表示不同的项目,如果这些众多的项目图形分别用单个的位图资源来表示则工程中的位图资源会很多很乱,而且不好管理,而树形控件的项目图形通常面积非常的小,没必要为每个图形创建一个位图资源;

!!CTreeCtrl使用图形列表控件CImageList来管理项目图标;

    4) 图形列表控件:

         i. 是Windows95中引入的高级图形控件,也成为可选图形列表控件;

         ii. 该控件中只加载一个位图࿰

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Visual C++ MFC(Microsoft Foundation Class,微软基础类库)扩展编程是使用Visual C++和MFC框架进行Windows应用程序开发的一种方法。下面是一个MFC扩展编程的实例: 假设我们需要开发一个文件管理器应用程序,可以浏览和管理计算机上的文件和文件夹。 首先,我们创建一个新的MFC应用程序项目,并在应用程序的主界面上放置一个树形视图(CTreeView控件和一个列表视图(CListView)控件树形视图将用于显示文件和文件夹的层次结构,列表视图将用于显示当前文件夹中的文件列表。 然后,我们编写代码来读取计算机上的文件和文件夹,并将它们显示在树形视图中。可以使用CFileFind类来获取计算机上的文件和文件夹。 接下来,我们为树形视图添加一个响应双击事件的消息处理函数。当用户双击树形视图中的文件夹时,我们将根据所选文件夹更新列表视图中的文件列表。 在列表视图中,我们可以使用CListCtrl类来显示文件列表。我们可以为列表视图添加列标题,例如文件名、文件大小、修改日期等。 最后,我们需要为列表视图添加一个响应双击事件的消息处理函数。当用户双击列表视图中的文件时,我们可以打开或编辑该文件。 除了以上示例,MFC扩展编程还可以实现许多其他功能,例如通过绘图控件绘制图形、通过数据库连接和操作数据等。 总结起来,Visual C++ MFC扩展编程可以帮助我们使用MFC框架开发功能丰富的Windows应用程序。在开发过程中,我们可以利用各种MFC控件和类,实现各种功能和交互效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值