1.CTreeCtrl的创建

if (!m_treFileList.Create(TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_CHECKBOXES| WS_CHILD | WS_VISIBLE ,CRect(0,0,200,400),this,IDC_TREELIST))return -1;

2.插入文件

m_hRoot = m_treFileList.InsertItem(L"我的文件");//插入根节点ShowFile(L"F:\\1", m_hRoot);//以E:\\test为根目录进行遍历void CDownloadDlg::ShowFile(CString str_Dir, HTREEITEM tree_Root)
{CFileFind FileFind;//临时变量,用以记录返回的树节点HTREEITEM tree_Temp;//判断输入目录最后是否存在'\',不存在则补充if (str_Dir.Right(1) != "\\")str_Dir += "\\";str_Dir += "*.*";BOOL res = FileFind.FindFile(str_Dir);while (res){tree_Temp = tree_Root;res = FileFind.FindNextFileW();if (FileFind.IsDirectory() && !FileFind.IsDots())//目录是文件夹{CString strPath = FileFind.GetFilePath(); //得到路径,做为递归调用的开始CString strTitle = FileFind.GetFileName();//得到目录名,做为树控的结点tree_Temp = m_treFileList.InsertItem(strTitle, 1, 1, tree_Root);//第二个参数是点击前的图片第三个参数是点击后的图片ShowFile(strPath, tree_Temp);}else if (!FileFind.IsDirectory() && !FileFind.IsDots())//如果是文件{CString strPath = FileFind.GetFilePath(); //得到路径,做为递归调用的开始CString strTitle = FileFind.GetFileName();//得到文件名,做为树控的结点m_treFileList.InsertItem(strTitle, 0, 0, tree_Temp);}}FileFind.Close();

3.添加响应事件当选择的是文件夹时自动选择该文件夹下的文件

ON_NOTIFY(NM_CLICK,IDC_TREELIST,CDownloadDlg::OnClickTree)

void CDownloadDlg::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult)
{// TODO: Add your control notification handler code hereCPoint point;UINT uFlag;                 //接收有关点击测试的信息的整数HTREEITEM hTree;BOOL bCheck;GetCursorPos(&point);            //获取屏幕鼠标坐标m_treFileList.ScreenToClient(&point);      //转化成客户坐标hTree = m_treFileList.HitTest(point,&uFlag);  //返回与CtreeTtrl关联的光标的当前位置和句柄if((TVHT_NOWHERE & uFlag)){return;}if (hTree && (TVHT_ONITEMSTATEICON & uFlag)) //点中复选框{m_treFileList.SelectItem(hTree);CString temp = m_treFileList.GetItemText(hTree) + "\r\n";TRACE(temp);bCheck = m_treFileList.GetCheck(hTree);   //获取当前复选状态SetChildCheck(hTree,!bCheck);       //设置子项复选状态SetParentCheck(hTree, bCheck);       //设置父项复选状态}*pResult = 0;
}void CDownloadDlg::SetChildCheck(HTREEITEM hTree,BOOL bCheck)
{m_treFileList.Expand(hTree,TVE_EXPAND);hTree = m_treFileList.GetChildItem(hTree); //获取子项句柄while (hTree){m_treFileList.SetCheck(hTree, bCheck);   SetChildCheck(hTree,bCheck);      //递归调用hTree = m_treFileList.GetNextSiblingItem(hTree);  //获取兄弟的句柄}
}void CDownloadDlg::SetParentCheck(HTREEITEM hTree,BOOL bCheck)
{HTREEITEM hParent = m_treFileList.GetParentItem(hTree);if (hParent){HTREEITEM hChild = m_treFileList.GetChildItem(hParent);while (hChild){if (hChild == hTree){hChild = m_treFileList.GetNextSiblingItem(hChild);continue;}BOOL bflag = m_treFileList.GetCheck(hChild);if (bCheck == bflag)         //判断是否还有兄弟项被选择{return;}hChild = m_treFileList.GetNextSiblingItem(hChild);}m_treFileList.SetCheck(hParent,!bCheck);SetParentCheck(hParent,bCheck);       //设置父项的状态}
}

4.添加文件夹图标

ImageList4Tree=new CImageList;
bmp.LoadBitmap(IDB_BITMAP1);//bmp文件id
if(!ImageList4Tree->Create(16, 16, ILC_COLOR24 | ILC_MASK, 4, 4))
return FALSE;
ImageList4Tree->Add(&bmp, RGB(255,0,255));

m_treFileList.SetImageList(ImageList4Tree,NULL);

mfc在CTreeCtrl上添加文件夹图标和文件目录的选择相关推荐

  1. QtCreator添加文件夹

    QtCreator中,需要添加文件夹,无法直接在设计器中新建,需要先在磁盘上添加文件夹,并且里面要放一个.cpp文件,只要是个cpp文件都行,然后添加: 右击项目 > Add Existing ...

  2. svn取消文件夹图标_如何去掉svn文件夹上面的符号

    如何去掉svn文件夹上面的符号 如何去掉svn文件夹上面的符号 第一步:建立一个名字叫做remove-svn-folders.reg的文本(先建立txt文件,然后粘贴内容后再修改文件名字),记得后缀要 ...

  3. LINUX:拷贝文件src/指定目录下,文件夹图标上有个叉.更改文件权限可解决该问题。

    1. Ubuntu环境下安装软件,在usr/share/指定目录下增加该软件的驱动文件时,文件夹图标上有个叉.该文件的权限信息不正确. 2.使用命令:chmod 更改文件权限.sudo chmod 7 ...

  4. 如何将WPS云文档创建到计算机,WPS怎么添加电脑上的文件夹到云文档

    WPS添加电脑上的文件夹到云文档的解决方法:首先找到桌面上的"WPS文字",鼠标右键选择并点击"属性":然后在弹出的属性页面,点击"打开文件位置&qu ...

  5. wps文件怎么到云服务器,怎么添加WPS电脑上的文件夹到云文档

    怎么添加WPS电脑上的文件夹到云文档 发布时间:2020-07-24 10:55:09 来源:亿速云 阅读:95 作者:Leah 怎么添加WPS电脑上的文件夹到云文档?很多新手对此不是很清楚,为了帮助 ...

  6. 更换window上文件夹图标和记事本图标

    修改记事本图标: 运行,输入regedit,选择值搜索,搜索txtfile,将txtfile中DefaultIcon 项的值改成 ico的完整路径,如:D:\19.ico. 修改文件夹图标: 运行,输 ...

  7. 批量解决win10程序以及文件夹图标上有两个蓝色箭头的方法

    桌面存在两个蓝色的对角箭头,或新建文件或文件夹时出现两个蓝色对角箭头的解决办法: 解决办法:双击"此电脑",点击"C盘",可以看到一个"用户" ...

  8. CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)...

    Obtaining (and managing) file and folder icons using SHGetFileInfo in C# 作者:Paul Ingles  翻译:小新0574 审 ...

  9. 苹果计算机怎么添加在快捷方式,如何在 iPhone 主屏幕上添加文件快捷方式?

    如何在 iPhone 主屏幕上添加文件快捷方式?文件管理系统一直是 iOS 的弱项,这是由于 iOS 文件操作逻辑与 Windows 完全不同,是iOS「沙盒」机制的产物,那么如何在 iOS 现有框架 ...

最新文章

  1. 消灭 Java 代码的“坏味道”
  2. Kong APIGW — OpenResty
  3. MyBatis 的执行流程,写得太好了!
  4. Java中的异常全面讲解
  5. SpringAMQP--入门案例的消息接收
  6. keil之编辑环境配置
  7. 服务器复制不了文档,服务器复制粘贴不了
  8. 【速来抢】iPhone12、STM32开发板、1024元现金红包…打包免费送!!!
  9. 扩展图形输出 1111 java
  10. SQL Tuning 基础概述05 - Oracle 索引类型及介绍
  11. delphi mysql 连接_Delphi 使用之连接数据库
  12. c语言中计算熵的函数,如何用c++编程实现各种信源熵的计算
  13. 矩阵键盘焊接_如何更换和重新焊接机械键盘开关
  14. MATLAB等值线绘制
  15. Python代码对接抖音去水印提取API接口、TikTok去水印解析接口的源码
  16. Android菜单不显示图标,Android系统手机让通知栏不显示某个软件的图标 | 坐倚北风...
  17. 一根MicroUSB线完成树莓派zero开机配置(包括SSH以及网络共享)
  18. 3.7 App.vue-常用配置【uni-app教程uniapp教程(黄菊华-跨平台开发系列教程)】
  19. Python AQI空气污染指数数据分析与机器学习
  20. 家用小型中央空调发展的现状与趋势

热门文章

  1. 硕士学位数据分析师工资_值得拥有数据科学方面的硕士学位
  2. MindMapper中各类模板的运用方法
  3. 一款全新的平面UI套件,专门用于桌面应用程序
  4. c语言中简易公交一卡通系统的实现
  5. UML中各种图形的关系和用法
  6. 昂视智能:打造中国工业智能领域的旗舰企业
  7. 171230 编程-井字棋(逆)的先手必胜策略
  8. 总结 : 毕设采访原文呈现
  9. javaweb—web环境搭建
  10. A006-AndroidManifest.xml解析