使用三态树实现多目录选择

参考:徐景周的三态树的实现

在选择目录时,可以使用系统提供的Shell函数SHBrowseForFolder,这个函数功能比 较强大,在一般情况下使用它基本上能够满足要求,但是,这个函数也有一个缺陷,就是不能选择多个目录,每次只能返回一个选择的目录。可是在实际的工作中,需要 一次返回多个选择的目录。我一开始琢磨着用CFileDialog来实现,可是后来发现无 法实现我要的功能。于是乎就采取了一种比较“笨”的办法,用三态树实现多目录选 择。参考了徐景洲的三态树的实现和其他一些关于CTreeCtrl控件显示目录的代码后,就动手写了这个工程。原本不敢拿出来献丑,可以发现很多网友问多选目录的问题,而 又没有比较好的解决方案,于是就拿出来献献丑了。

以下就为将CFolderTreeCtrl类添加到工程中的步骤:

1、生成一个新的对话框工程;

2、将FolderTreeCtrl.h,FolderTreeCtrl.cpp文件添加到工程中;

3、将STATEBMP.BMP,folderbmp.bmp文件添加到工程资源中,并设定资源ID。这里

设置如下folderbmp.bmp -> IDB_BITMAP_LIST

STATEBMP.BMP -> IDB_BITMAP_STATE;

4、定义CTreeCtrl控件为我们的类型CFolderTreeCtrl m_tree;

5、在对话框类中添加代码:

BOOL CMultiFolderDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
    ......
  m_imgState.Create(IDB_BITMAP_STATE,13, 1, RGB(255,255,255));
  m_imgList.Create(IDB_BITMAP_LIST,16, 1, RGB(255,255,255));

  m_tree.SetImageList(&m_imgList,TVSIL_NORMAL);
  m_tree.SetImageList(&m_imgState,TVSIL_STATE);

  m_tree.DisplayTree(NULL,FALSE);

  return TRUE;
}

6、编译,运行,便可以得到一个多目录选择的对话框了。

具体的实现可以参考工程代码。

本文配套源码

时间: 2024-10-22 17:02:38

使用三态树实现多目录选择的相关文章

使用三态树实现多个注册表子键的选择

实现注册表的浏览和多个子键的选择,可以配合 CRegisterExport 类(参见"导入导出注册表项的类"一文),将选择的注册表项导出. 以下是将 CRegisterTreeCtrl 类添加到工程中的步骤: 1.生成一个新的对话框工程: 2.将 RegisterTreeCtrl.h,RegisterTreeCtrl.cpp 文件添加到工程中: 3.将STATEBMP.BMP,folderbmp.bmp文件添加到工程资源中,并设定资源ID.这里设置如下:folderbmp.bmp -&

extjs4.2 三态树

问题描述 js比较菜,请问下哪位大神写过extjs4.2的三态树给个源码,或者给个思路,貌似extjs3.x是通过重写Ext.ux.TreeCheckNodeUI控件,那时4貌似没有这个类啊. 解决方案 Extjs4在Ext.tree.Panel中对带有checkbox的树的节点的选择上和extjs3不一样,主要是在tree上添加checkchange事件left_tree.on('checkchange',function(node, checked){checkboxSelected(nod

浅谈EasyUi ComBotree树修改 父节点选择的问题_jquery

本人在使用 Easy UI 期间发现了一个不太适合项目的bug,可能也不算bug把 . 毕竟不同项目背景 取舍不同. 我在做网元树选择的时候  发现当选取父节点后,子节点都会被选择  返回  .但是如果我们选中父节点后没有必要选择子节点. 故对源脚本作适当修改 下拉框树修改 父节点选中后只显示父节点  取消返回子节点 修改方法 找到树的选择函数 进行遍历判断  查找关键字 combotree multiple 大约行数 10564   function _7d5(_7d6) { var opts

js用于树型结构级联选择

js|树型结构 <html> <head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>及联选择-用于权限选择比较合适</title></head> <body><ul id="tree">    <li><input type=c

网页制作实例:js用于树型结构级联选择

js|树型结构|网页 <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>及联选择-用于权限选择比较合适</title></head><body><ul id="tree">    <li><input type=

java-jsp前台选择目录怎么实现

问题描述 jsp前台选择目录怎么实现 想前台选择目录,后台对选择的目录批量生成文件,前者怎么实现?注:input file是选择文件的 解决方案 你可以试试,用一个select让用户进行目录选择. 或者用jquery easy ui 的tree(树),让用户进行选择,选择之后传递到后台,然后你在继续其他操作. 解决方案二: 服务器端获取目录后输出到select对象中,让用户选择要上传到哪个目录就行了 解决方案三: 选目录是要干嘛用?能不能说下 解决方案四: 选了文件取上级目录不行吗 ? 好奇怪的

jQuery目录树插件wdTree使用方法

wdTree是一个轻量级的jQuery目录树插件,支持多级目录选择,目录和文件复选框选项,获取复选框的值,支持多个配置参数自定义,多个回调函数配置,还可以从其他页面AJAX Loading数据加载. 使用方法   要使用这个插件,需要一个HTML的元素,比如下面的代码: <div id="tree"></div> 然后调用插件 var o = {     showcheck: true     //onnodeclick:function(item){alert

自己写的Jquery DropTree下拉选择树插件

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dba10g.blog.51cto.com/764602/1188190 闲话少聊,今天本人重点看了看jquery插件开发这一块.想通过代码,实际练下兵.当然,也是为了解决项目的实际需要.平时,我们经常遭遇"选择框"这个控件. 平时,如果我们的选择项非常简单, 一般用浏览器自带的select 就OK了.但是如果字典项直接存在上下级关系,也就是经常见到的树结构 ,那就非常

ios-在滚动表视图时选择目录重复

问题描述 在滚动表视图时选择目录重复 在一个表视图中显示信息,信息是固定的.使用逻辑将选择目录选择特定的空间.代码如下: -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CellIdentifier"; // intializing tableview ce