QQ登录

只需一步,快速开始

上位机MFC实现树形菜单资源管理器源代码

[ 复制链接 ]


效果如图:

上位机MFC实现树形菜单资源管理器源代码

上位机MFC实现树形菜单资源管理器源代码

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机MFC实现树形菜单资源管理器源代码.rar 
文件大小:43 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


关键代码为
  1. void CDirTreeView::AddNode(const char * path, HTREEITEM node, int type, int mode)
  2. {
  3. WIN32_FIND_DATA fd;
  4. HANDLE                        hFind;
  5. char                        buff [_MAX_PATH];        //        temporary storage
  6. HTREEITEM                newNode = node;                //        May be used to build pathname without
  7. int                                image1, image2;                                                                                //        adding any new nodes.
  8. CString                        dirPath;

  9. //        If a node name was passed to us then we will add the node.
  10. //        Otherwise, we need to get a directory name first and then recurse.
  11. //
  12.         if (path)
  13.         {

  14. //        if the mode indicates that we are adding a drive node
  15. //        then we need to:
  16. //                add the drive label in parens.
  17. //                reset the mode to tmShort (actually, on fast machines this
  18. //                        doesn't really speed things up).
  19.                 if (type >= DRIVE_REMOVABLE)
  20.                 {
  21.                 char        VolName[24];
  22.                 char        RootName[10];
  23.                 DWORD        dwCompLen, dwFlags;

  24.                         memset (&fd, '\0', sizeof (WIN32_FIND_DATA));
  25.                         fd.dwFileAttributes = FILE_ATTRIBUTE_SYSTEM;
  26.                         sprintf (RootName, "%s\", path);
  27.                         memset (VolName, '\0', sizeof (VolName));
  28.                         strcpy (fd.cFileName, RootName);
  29.                         GetVolumeInformation (RootName, VolName, 24, NULL, &dwCompLen, &dwFlags, NULL, 0);
  30.                         if (strlen (VolName))
  31.                         {
  32.                                 wsprintf(buff, "%s (%s)", path, VolName);
  33.                         }
  34.                         else
  35.                                 wsprintf (buff, "%s", path);
  36.                         image1 = image2 = GetIconIndex (fd);
  37.                         newNode = InsertChild (node, buff, image1, image2, TVI_LAST);
  38.                         mode = CDirTreeView::tmShort;
  39.                 }
  40. //        Otherwise just use the node name passed
  41.                 else
  42.                 {
  43.                         strcpy(buff, path);

  44. //        Add the node as a child to the current node using the folder images.
  45. //        Use the sort flag to sort the tree as we go.so the list is sorted
  46. //        as we go.
  47.                         memset (&fd, '\0', sizeof (WIN32_FIND_DATA));
  48.                         strcpy (fd.cFileName, buff);
  49.                         fd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
  50.                         image1 = GetIconIndex (fd);
  51.                         fd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY | SHGFI_OPENICON;
  52.                         image2 = GetIconIndex (fd);
  53.                         newNode = InsertChild (node, buff, image1, image2, TVI_SORT);
  54.                 }
  55.         }

  56. //        Build a path name based on the node.
  57.         BuildPath(dirPath, newNode);
  58. //        Add wildcards
  59.         dirPath += "*.*";
  60. //
  61. //        Look for the first match. Return if none.
  62.         if ((hFind = FindFirstFile(dirPath, &fd)) == INVALID_HANDLE_VALUE)
  63.         {
  64.                 return;
  65.         }
  66. // add one to the level we are on
  67.         m_nLevel++;
  68.         do
  69.         {
  70.                 if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  71.                                 && (!(fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)))
  72.                 {
  73.                         if (!strcmp (fd.cFileName, "."))
  74.                         {
  75.                                 ;                // Current directory. Do nothing.
  76.                         }
  77.                         else if (!strcmp (fd.cFileName, ".."))
  78.                         {
  79.                                 ;                // Parent directory. Do nothing.
  80.                         }
  81.                         else
  82.                         {

  83. //        If the are building the intial tree structure (tmShort) or we are
  84. //        expanding a level (tmDetail), add the node by recursion.
  85.                                 if (((mode == CDirTreeView::tmShort)
  86.                                                 && (m_nLevel < 2))
  87.                                                 || (mode == CDirTreeView::tmDetail))
  88.                                         AddNode(fd.cFileName, newNode, 0, mode);        // type, 0);        // mode);

  89. //        If we're building the initial structure, we want to add only one
  90. //        subnode to make the plus symbold appear.
  91.                                 if (mode == CDirTreeView::tmShort)
  92.                                         break;

  93. //        In the detail mode we need to fill this branch completely
  94. //        but only one sub-node per node under this branch. Again,
  95. //        we have to do this so the + sign shows up next to the node.
  96.                                 if (mode == CDirTreeView::tmDetail && m_nLevel > 1)
  97.                                 {
  98.                                         break;
  99.                                 }
  100.                         }
  101.                 }
  102.         } while (::FindNextFile (hFind, &fd));                // Look for the next match
  103.         FindClose (hFind);

  104. // decrement the level counter
  105.         m_nLevel--;
  106. }
复制代码


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索