VC的CTreeCtrl类的递归使用

本文是对第20期中"遍历文件夹并建成目录树"一文的补充。

CTreeCtrl是可是化编程中很实用的一个类,可以用于目录结构、层次结构、属性结构,尤其是在显示文件目录结构时更是应用广泛。看了第20期北京林业大学的李少杰朋友的一篇"遍历文件夹并建成目录树",觉得深有感触,初学VC时确实CTreeCtrl类很难掌握;至于对"树的遍历",也是数据结构的一个难点。李朋友的那篇文章解决了如果用CTreeCtrl显示目录结构,在他程序中,没有能够完善解决如何递归未知层数的目录的问题,(在CtreeCtrl的使用和函数的递归调用上有不足之处),我想对这个问题作一点补充。

我的这个程序可以搜任意层目录,其输出结果如下:

下面我谈谈怎么编写这个程序:

首先,也是用MFC AppWizard[exe]生成一个dialog base的框架,在上面放一个Tree控件,并创建一个成员函数m_Tree来指向这个控件。

之后,编写递归搜索函数

void AddFile( CString StrPath, HTREEITEM faItem );最后,在OnInitDialog()中调用AddFile,这样在程序已开始运行就显示Tree。

详细的内容请参考附带的源代码。

下面,我将着重讲讲如何编写AddFile函数。对于文件目录结构的遍历,选用递归算法是不错的。用递归方法对树进行遍历常用的有深度优先和广度优先两种搜索方法,由于我们要遍力整个树,所以选用深度优先的算法是不错的。因为在这里,深度优先和广度优先的时间复杂度一样,但是深度优先比较节省堆栈资源。以下,就是采用深度优先搜索的AddFile函数,我将在程序中作进一步说明。

时间: 2024-11-01 12:45:04

VC的CTreeCtrl类的递归使用的相关文章

c++-如何对CTreeCtrl类进行修改

问题描述 如何对CTreeCtrl类进行修改 需要一个树形的控件.节点展开后下面需要显示一些文本. CtreeCtrl只能显示子节点.确不能显示文本..求思路 也就是说 需要给没个节点附加一部分文本信息 在节点展开后 显示在节点的下面, 后面显示子节点 类似于IE web 的TreeView 或者说我有什么方法在VC中使用TreeView控件

支持数据项查找功能的树控制(CTreeCtrl)类

代码运行效果图如下: 一.树控制(CTree Control) 树控制用于显示具有一定层次结构的数据项.很多应用程序都使用该控件,例如资源管理器中的磁盘目录等. 树控制中有根数据项(root item),根数据项下包含各个子数据项(child item).根数据项是所有子数据项的父亲,而这些子数据项是根数据项的孩子.所有子数据项互为兄妹(sibling)关系.每个数据项包括数据项名称(文本字符串)和用于表示该数据项的图像,每个数据项下还可以包含子项,整个结构就象一棵树. 二.使用树控制 在MFC

c++-VC++6.0类初始化问题,下面的代码在6.0中编译通不过在GCC中就可以

问题描述 VC++6.0类初始化问题,下面的代码在6.0中编译通不过在GCC中就可以 #include #include using std::string; using std::cout; using std::endl; class Student{ int n; string name; public: Student( int num, string m) : n(num), name( m ) { } void display( void ) { cout << n <<

KeelKit 开始支持 VC++的 实体类生成 和 存储过程调用接口的生成

我们现在开始支持 VC++的 实体类生成 和 存储过程调用接口的生成!这将大大的方便了一些使用C++的朋友引用Keel.dll! 生成后的代码效果如下: #pragma once #using using namespace System::Security::Permissions; [assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum, SkipVerification=false)]; // 生成日期:20

VC中CWinThread类以及和createthread API的区别分析_C 语言

本文实例讲述了VC中CWinThread类以及和createthread API的区别分析,分享给大家供大家参考.具体分析如下: CWinThread CObject  └CCmdTarget     └CWinThread CWinThread对象代表在一个应用程序内运行的线程.运行的主线程通常由CWinApp的派生类提供:CWinApp由CWinThread派生.另外,CWinThread对象允许一给定的应用程序拥有多个线程. CWinThread支持两种线程类型:工作者线程(Worker

CISBitmap派生的VC++位图透明类实例_C 语言

本文所述为一个由CISBitmap派生的VC++位图透明类,可以方便实现BMP图像的透明处理,主要包含两个文件,使用时主需要将其引入到你的C++工程中即可,具体的类代码如下: CISBitmap.cpp文件代码如下: #include <stdafx.h> #include "CISBitmap.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW

VC++中图像处理类CBitmap的用法_C 语言

VC++中图像处理类CBitmap的用法 class CBitmap : public CGdiObject { DECLARE_DYNAMIC(CBitmap) public: static CBitmap* PASCAL FromHandle(HBITMAP hBitmap); // Constructors CBitmap(); BOOL LoadBitmap(LPCTSTR lpszResourceName); BOOL LoadBitmap(UINT nIDResource); BOO

VC中删除类的两种操作方法_C 语言

本文实例讲述了VC中删除类的两种操作方法.分享给大家供大家参考.具体方法如下: 方法一: 应该是先在windows里面删除.h和.cpp文件,然后打开项目,Ctrl-W打开Class    wizard,选这个Dialog类,然后提示找不到了,选remove,然后到File    view列表里面选这两个文件,按Delete删除,这样才彻底,否则.clw文件内会保留信息的 方法二: 在你的工程的FileView中删除相应的h文件和cpp文件,然后把工程关了 到相应文件夹下,把该类的h和cpp文件

vc应用CPictureEx类(重载CStatic类)加载gif动画

1.PictureEx.h文件: //////////////////////////////////////////////////////////////////////// PictureEx.cpp: implementation of the CPictureEx class.//// Picture displaying control with support for the following formats:// GIF (including animated GIF87a a