本文对MFC中,用树型控件实现文件目录的浏览进行了简单的介绍。主要实现以下几个功能:1、显示文件目录树;2、对于文件,在树型控件中双击进行打开;3、树节点添加简单右键菜单。系统:windows8.1工具:Visual Studio2013
一、树型控件显示文件目录树1、首先,让我们在VS中建立一个MFC工程,就命名为"MyTree"吧,如图1-1;点击下一步,进入图1-2,在“应用程序类型”中选择“基于对话框”;这里直接点击“完成”按钮。(当然,你可以根据自己的需要进行一些其他选项的配置,这里不详述)
图1-1 新建MFC工程
图1-2 选择“基于对话框”选项
2、现在,把生成的对话框中的静态文本框选中删除掉,就是图1-3中的中间那个。图1-3 去掉中间的文本框
3、然后我们从“工具箱”中选中Tree Control,将它添加到对话框中设置以下几个属性为true:Has Button、Has Lines、Lines At Root;其他属性为默认值。当然你都可以根据自己的想法来选择,可以实践看看效果如何~设置属性ID为:IDC_MYTREE 。设置好后如图1-4所示。图1-4添加树型控件
4、选中我们的树型控件,右键->添加变量,添加一个控件变量,名为“m_MyTree”。如图1-5。完成后,你可以在MyTreeDlg.h头文件中找到它。图1-5 添加控件变量
5、接下来,让我们在MyTreeDlg.h文件中添加函数ShowFile(就在声明m_MyTree下面),ShowFile主要功能就是递归浏览给定目录下的文件,并且将其显示在树型控件中,声明如下:......public:CTreeCtrl m_MyTree;void ShowFile(CString str_Dir, HTREEITEM tree_Root);......
在MyTreeDlg.cpp中添加函数实现:
//函数名称:CMyScriptDlg::BrowseFile//函数功能:遍历给定目录str_Dir下的文件夹及文件,并插入到树形控件中//输入参数:str_Dir(起始目录),tree_Root(树形控件的根节点)//输出参数:无//返回值
void CMyTreeDlg::ShowFile(CString str_Dir, HTREEITEM tree_Root){
代码并不复杂,可以自行阅读,简单说明一下:1)这里用至了CFileFind类,具体的说明可以google或MSDN,在通过此类对象获取文件的路径或名称时,要至少调用一次FindNextFileW(),至于为什么,我也不是很清楚,不过打断点来看,只调用FindFile时,是没有文件路径或名称的属性的。2)HTREEITEM可以理解为代表一个树节点的结构,看代码它实际是指向_TREEITEM的指针,至于里面是什么,我就没有细看了,有兴趣的可以研究一下。struct _TREEITEM;typedef struct _TREEITEM *HTREEITEM;其他的就没什么了,函数很简单,就是采用递归的方式来遍历,并且插入到树中。
剩下我们需要做的就是在对话框初始化的过程中,对树型控件进行初始化。也就是在MyTreeDlg.cpp的OnInitDialog()函数中,return的前面,添加如下代码:记得在MyTreeDlg.h中声明m_TreeRoot哈,用来记录根节点。//MyTreeDlg.cpp......// TODO:
至此显示文件目录树就完了(如图1-6),很简单的一个例子~下次我们介绍如何在树中双击打开文件。图1-6 显示文件树