亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? shelltree.cpp

?? CAN__組建現場總線系統設計技術(光盤)
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
                        }

                    }
                  if (lpsf2)
                    lpsf2->Release ();
                }
              return bRet;
            }

        }
      if (lpsf2)
        lpsf2->Release ();
    }
  return bRet;
}

/****************************************************************************
 *
 *  FUNCTION:   GetSelectedFolderPath(CString &szFolderPath)
 *
 *  PURPOSE:    Retrieves the path of the currently selected string.
 *              Pass a CString object that will hold the folder path.
 *              If the path is not in the filesystem(eg MyComputer)
 *              or none is selected it returns false.
 *
 *  MESSAGEMAP: NONE
 *
 ****************************************************************************/
BOOL CShellTree::
GetSelectedFolderPath (CString & szFolderPath)
{
  LPTVITEMDATA lptvid;          //Long pointer to TreeView item data

  LPSHELLFOLDER lpsf2 = NULL;
  static TCHAR szBuff[MAX_PATH];
  HTREEITEM hItem = GetSelectedItem ();
  HRESULT hr;
  BOOL bRet = false;

  if (hItem)
    {
      lptvid = (LPTVITEMDATA) GetItemData (hItem);

      if (lptvid && lptvid->lpsfParent && lptvid->lpi)
        {
          hr = lptvid->lpsfParent->BindToObject (lptvid->lpi,
                                                 0, IID_IShellFolder, (LPVOID *) & lpsf2);

          if (SUCCEEDED (hr))
            {
              ULONG ulAttrs = SFGAO_FILESYSTEM;

              // Determine what type of object we have.
              lptvid->lpsfParent->GetAttributesOf (1, (const struct _ITEMIDLIST **) &lptvid->lpi, &ulAttrs);

              if (ulAttrs & (SFGAO_FILESYSTEM))
                {
                  if (SHGetPathFromIDList (lptvid->lpifq, szBuff))
                    {
                      szFolderPath = szBuff;
                      bRet = true;
                    }
                }
            }
          else
            {
              if (lpsf2)
                lpsf2->Release ();
              HTREEITEM hItem2 = GetParentItem (hItem);

              if (hItem2)
                {
                  lptvid = (LPTVITEMDATA) GetItemData (hItem2);

                  if (lptvid && lptvid->lpsfParent && lptvid->lpi)
                    {
                      hr = lptvid->lpsfParent->BindToObject (lptvid->lpi,
                                                             0, IID_IShellFolder, (LPVOID *) & lpsf2);

                      if (SUCCEEDED (hr))
                        {
                          ULONG ulAttrs = SFGAO_FILESYSTEM;

                          // Determine what type of object we have.
                          lptvid->lpsfParent->GetAttributesOf (1, (const struct _ITEMIDLIST **) &lptvid->lpi, &ulAttrs);

                          if (ulAttrs & (SFGAO_FILESYSTEM))
                            {
                              if (SHGetPathFromIDList (lptvid->lpifq, szBuff))
                                {
                                  CString item = GetItemText (hItem);

                                  szFolderPath = szBuff[_tcslen (szBuff) - 1] == _T ('\\') ? szBuff + item : CString (szBuff) + _T ("\\") + item;
                                  bRet = true;
                                }
                            }
                        }

                    }
                  if (lpsf2)
                    lpsf2->Release ();
                }
              return bRet;
            }

        }
      if (lpsf2)
        lpsf2->Release ();
    }
  return bRet;
}

/****************************************************************************
 *
 *  FUNCTION:   GetParentShellFolder(HTREEITEM folderNode)
 *
 *  PURPOSE:    Retrieves the pointer to the ISHELLFOLDER interface
 *              of the tree node passed as the paramter.
 *
 *  MESSAGEMAP: NONE
 *
 ****************************************************************************/
LPSHELLFOLDER CShellTree::
GetParentShellFolder (HTREEITEM folderNode)
{
  LPTVITEMDATA lptvid;          //Long pointer to TreeView item data

  lptvid = (LPTVITEMDATA) GetItemData (folderNode);
  if (lptvid)
    return lptvid->lpsfParent;
  else
    return NULL;
}

/****************************************************************************
 *
 *  FUNCTION:   GetRelativeIDLIST(HTREEITEM folderNode)
 *
 *  PURPOSE:    Retrieves the Pointer to an ITEMIDLIST structure that
 *              identifies the subfolder relative to its parent folder.
 *              see GetParentShellFolder();
 *
 *  MESSAGEMAP: NONE
 *
 ****************************************************************************/
LPITEMIDLIST CShellTree::
GetRelativeIDLIST (HTREEITEM folderNode)
{
  LPTVITEMDATA lptvid;          //Long pointer to TreeView item data

  lptvid = (LPTVITEMDATA) GetItemData (folderNode);
  if (lptvid)
    return lptvid->lpifq;
  else
    return NULL;
}

/****************************************************************************
 *
 *  FUNCTION:   GetFullyQualifiedIDLIST(HTREEITEM folderNode)
 *
 *  PURPOSE:    Retrieves the Retrieves the Pointer to an ITEMIDLIST
 *              structure that identifies the subfolder relative to the
 *              desktop. This is a fully qualified Item Identifier
 *
 *  MESSAGEMAP: NONE
 *
 ****************************************************************************/
LPITEMIDLIST CShellTree::
GetFullyQualifiedID (HTREEITEM folderNode)
{
  LPTVITEMDATA lptvid;          //Long pointer to TreeView item data

  lptvid = (LPTVITEMDATA) GetItemData (folderNode);
  if (lptvid)
    return lptvid->lpifq;
  else
    return NULL;
}

/****************************************************************************
 *
 *  FUNCTION:   SearchTree( HTREEITEM treeNode,
 *                          CString szSearchName )
 *
 *  PURPOSE:    Too crude to explain, just use it
 *
 *  WARNING:    Only works if you use the default PopulateTree()
 *              Not guaranteed to work on any future or existing
 *              version of windows. Use with caution. Pretty much
 *              ok if you're using on local drives
 *
 ****************************************************************************/
bool CShellTree::
SearchTree (HTREEITEM treeNode,
            CString szSearchName,
            FindAttribs attr)
{
  LPTVITEMDATA lptvid;          //Long pointer to TreeView item data

  LPSHELLFOLDER lpsf2 = NULL;
  TCHAR drive[_MAX_DRIVE];
  TCHAR dir[_MAX_DIR];
  TCHAR fname[_MAX_FNAME];
  TCHAR ext[_MAX_EXT];
  bool bRet = false;
  HRESULT hr;
  CString szCompare;

  szSearchName.MakeUpper ();
  while (treeNode && bRet == false)
    {
      lptvid = (LPTVITEMDATA) GetItemData (treeNode);
      if (lptvid && lptvid->lpsfParent && lptvid->lpi)
        {
          hr = lptvid->lpsfParent->BindToObject (lptvid->lpi,
                                                 0, IID_IShellFolder, (LPVOID *) & lpsf2);
          if (SUCCEEDED (hr))
            {
              ULONG ulAttrs = SFGAO_FILESYSTEM;
              lptvid->lpsfParent->GetAttributesOf (1, (const struct _ITEMIDLIST **) &lptvid->lpi, &ulAttrs);
              if (ulAttrs & (SFGAO_FILESYSTEM))
                {
                  if (SHGetPathFromIDList (lptvid->lpifq, szCompare.GetBuffer (MAX_PATH)))
                    {
                      switch (attr)
                        {
                        case type_drive:
                          _tsplitpath (szCompare, drive, dir, fname, ext);
                          szCompare = drive;
                          break;
                        case type_folder:
                          szCompare = GetItemText (treeNode);
                          break;
                        }
                      szCompare.MakeUpper ();
                      if (szCompare == szSearchName)
                        {
                          EnsureVisible (treeNode);
                          SelectItem (treeNode);
                          bRet = true;
                        }
                    }
                }
              lpsf2->Release ();
            }
        }
      treeNode = GetNextSiblingItem (treeNode);
    }
  return bRet;
}

/****************************************************************************
 *
 *  FUNCTION:   TunnelTree(CString szFindPath)
 *
 *  PURPOSE:    Too crude to explain, just use it
 *
 *  WARNING:    Only works if you use the default PopulateTree()
 *              Not guaranteed to work on any future or existing
 *              version of windows. Use with caution. Pretty much
 *              ok if you're using on local drives
 *
 ****************************************************************************/
void CShellTree::
TunnelTree (CString szFindPath)
{
  HTREEITEM subNode = GetRootItem ();
  CString szPathHop;
  TCHAR drive[_MAX_DRIVE];
  TCHAR dir[_MAX_DIR];
  TCHAR fname[_MAX_FNAME];
  TCHAR ext[_MAX_EXT];
  TCHAR delimiter[] = _T ("\\");

  CSHFileInfo checkPath (szFindPath);
  if (!checkPath.Exist ())
    {
      MessageBox (szFindPath, _T ("Folder not found"), MB_ICONERROR);
      return;
    }

  if (szFindPath.ReverseFind (_T ('\\')) != szFindPath.GetLength () - 1)
    {
      szFindPath += _T ("\\");
    }

  _tsplitpath (szFindPath, drive, dir, fname, ext);

  //search the drive first
  szPathHop = drive;
  subNode = GetChildItem (subNode);
  if (subNode)
    {
      if (SearchTree (subNode, szPathHop, CShellTree::type_drive))
        {
          //break down subfolders and search
          LPTSTR p = _tcstok (dir, delimiter);
          while (p)
            {
              subNode = GetSelectedItem ();
              subNode = GetChildItem (subNode);
              if (SearchTree (subNode, p, CShellTree::type_folder))
                p = _tcstok (NULL, delimiter);
              else
                p = NULL;
            }
        }
    }
}

/****************************************************************************
 *
 *  FUNCTION:   PopulateTree(LPCTSTR lpPath)
 *
 *  PURPOSE:    Populates tree based upon path.
 *
 *  AUTHOR:     Takehiko Mizoguti [mizoguti@m2.sys.to.casio.co.jp]
 *
 ****************************************************************************/
void CShellTree::PopulateTree (LPCTSTR lpPath)
{

  LPSHELLFOLDER lpsf = NULL, lpsf2 = NULL;
  LPITEMIDLIST lpi = NULL;
  HRESULT hr;
  TV_SORTCB tvscb;
  LPTSTR lpFolder = (LPTSTR) lpPath;
  LPTSTR lpNextFolder;
  TCHAR strPath[_MAX_PATH];

  LPMALLOC pMalloc;
  if (::SHGetMalloc (&pMalloc) == NOERROR)
    {

      // Get a pointer to the desktop folder.
      hr = SHGetDesktopFolder (&lpsf);

      if (SUCCEEDED (hr))
        {
          USES_CONVERSION;

          // Initialize the tree view to be empty.
          DeleteAllItems ();

          do
            {

              // Get the Next Component
              lpNextFolder = PathFindNextComponent (lpFolder);
              if (lpNextFolder && *lpNextFolder)
                {
                  memcpy (strPath, lpFolder, (lpNextFolder - lpFolder));
                  strPath[lpNextFolder - lpFolder] = _T ('\0');
                }
              else
                {
                  _tcscpy (strPath, lpFolder);
                  lpNextFolder = NULL;
                }

              // Get ShellFolder Pidl
              ULONG eaten;
              hr = lpsf->ParseDisplayName (NULL, NULL, T2OLE (strPath), &eaten, &lpi, NULL);
              if (FAILED (hr))
                {
                  break;
                }
              hr = lpsf->BindToObject (lpi, 0, IID_IShellFolder, (LPVOID *) & lpsf2);
              if (FAILED (hr))
                {
                  break;
                }

              pMalloc->Free (lpi);

              // Release the Parent Folder pointer.
              lpsf->Release ();

              // Chenge Folder Info
              lpsf = lpsf2;
              lpFolder = lpNextFolder;
            }
          while (lpNextFolder);

          FillTreeView (lpsf, NULL, TVI_ROOT);

        }
    }
  tvscb.hParent = TVI_ROOT;
  tvscb.lParam = 0;
  tvscb.lpfnCompare = TreeViewCompareProc;

  // Sort the items in the tree view
  SortChildrenCB (&tvscb /*, FALSE */ );

  HTREEITEM hItem;
  hItem = GetRootItem ();
  Expand (hItem, TVE_EXPAND);
  Select (GetRootItem (), TVGN_CARET);
}

////////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频免费在线| 中文字幕一区二区三区在线不卡 | 精品久久久久久最新网址| 国产精品色呦呦| 狠狠色丁香婷婷综合久久片| 欧美中文字幕亚洲一区二区va在线| 欧美精品一区二区三区蜜臀| 五月天亚洲婷婷| 91欧美一区二区| 国产精品无圣光一区二区| 久久99精品国产.久久久久| 在线免费不卡电影| 亚洲同性gay激情无套| 国产99一区视频免费| 精品少妇一区二区三区日产乱码 | 国产一区在线视频| 欧美一级在线视频| 日韩电影在线观看网站| 色噜噜狠狠成人中文综合 | 91成人网在线| 亚洲视频在线一区| 99久久国产综合色|国产精品| 久久九九久精品国产免费直播| 美女一区二区三区在线观看| 欧美日韩精品福利| 视频精品一区二区| 欧美理论在线播放| 日韩精品一卡二卡三卡四卡无卡| 欧美午夜免费电影| 亚洲国产另类av| 欧美精品视频www在线观看| 亚洲国产欧美一区二区三区丁香婷| 99久久精品国产一区| 国产精品成人一区二区三区夜夜夜 | 成人黄动漫网站免费app| 亚洲国产精品黑人久久久| 国产成人一区二区精品非洲| 国产欧美一区二区在线| 国产精品一区二区你懂的| 久久久精品综合| 成人av免费观看| 一区二区三区日本| 欧美人伦禁忌dvd放荡欲情| 五月天久久比比资源色| 91精品国产aⅴ一区二区| 久久国产精品免费| 日本一二三四高清不卡| 色综合咪咪久久| 亚洲va欧美va天堂v国产综合| 91精品国产综合久久久久久久久久| 日本系列欧美系列| 国产欧美日韩在线视频| 色综合视频一区二区三区高清| 亚洲va天堂va国产va久| 精品国一区二区三区| 99久久久久免费精品国产| 午夜影视日本亚洲欧洲精品| 26uuu欧美日本| 在线视频欧美区| 狠狠狠色丁香婷婷综合久久五月| 国产精品久久久久久久久免费丝袜 | 欧美www视频| 波多野结衣在线一区| 亚洲成年人网站在线观看| 亚洲精品在线三区| 在线观看视频91| 国产伦精品一区二区三区免费迷 | 色婷婷久久久综合中文字幕| 日韩精品1区2区3区| 国产欧美精品一区二区色综合 | 欧美激情一区在线观看| 欧美影视一区在线| 国产高清精品网站| 午夜国产精品一区| 国产精品免费丝袜| 精品日韩欧美一区二区| 一本久道中文字幕精品亚洲嫩 | 蜜臀精品一区二区三区在线观看 | hitomi一区二区三区精品| 午夜激情综合网| 成人免费一区二区三区在线观看| 欧美一区二区三区四区久久| 97久久久精品综合88久久| 黑人巨大精品欧美黑白配亚洲| 亚洲另类在线视频| 国产欧美一区二区三区在线老狼| 7777精品伊人久久久大香线蕉经典版下载| 成人性生交大片| 久久精品免费看| 日韩精品电影一区亚洲| 亚洲黄色录像片| 国产精品久久久久永久免费观看 | 日韩亚洲欧美在线| 在线观看av不卡| 91在线无精精品入口| 国产乱子轮精品视频| 热久久久久久久| 午夜精品久久久| 亚洲国产欧美日韩另类综合 | 中日韩av电影| 久久久久亚洲蜜桃| 日韩精品中午字幕| 4438x成人网最大色成网站| 在线免费一区三区| 91女厕偷拍女厕偷拍高清| 不卡av在线免费观看| 国产一区二区三区精品视频| 美女网站视频久久| 美女mm1313爽爽久久久蜜臀| 婷婷夜色潮精品综合在线| 午夜精品aaa| 国产亚洲成av人在线观看导航| 日韩高清在线不卡| 伊人开心综合网| 亚洲一区二区在线免费看| 亚洲欧洲精品一区二区三区 | 日韩免费看的电影| 日韩美女天天操| 日韩免费观看2025年上映的电影| 91精品国产综合久久久久| 6080日韩午夜伦伦午夜伦| 91精品国产综合久久精品| 7777精品伊人久久久大香线蕉经典版下载 | 精品久久一区二区| 久久精品亚洲精品国产欧美kt∨| 中文字幕第一页久久| 亚洲天堂网中文字| 亚洲一线二线三线视频| 青青草国产成人99久久| 精品一区二区三区视频在线观看| 韩国精品久久久| jvid福利写真一区二区三区| 91亚洲国产成人精品一区二区三 | 日韩激情在线观看| 韩日欧美一区二区三区| caoporn国产一区二区| 欧美性色综合网| 精品福利一二区| 国产精品成人免费精品自在线观看| 亚洲你懂的在线视频| 日本伊人色综合网| 国产成人自拍在线| 欧美午夜精品一区| 精品成人一区二区| 亚洲日本在线a| 日韩va亚洲va欧美va久久| 岛国一区二区三区| 欧美日韩国产乱码电影| 精品国产1区二区| 亚洲一区二区三区三| 精久久久久久久久久久| 91极品美女在线| 精品日产卡一卡二卡麻豆| 亚洲欧洲无码一区二区三区| 男人的j进女人的j一区| 91麻豆福利精品推荐| 日韩你懂的在线观看| 一区二区三区四区高清精品免费观看| 奇米色777欧美一区二区| 99这里只有精品| 日韩欧美一级精品久久| 一区二区三区四区乱视频| 国产成人在线影院| 欧美一区二区三区喷汁尤物| 国产精品久久久久婷婷二区次| 蜜桃免费网站一区二区三区| 欧美综合在线视频| 日本一区二区三区dvd视频在线 | 午夜影院在线观看欧美| hitomi一区二区三区精品| 精品国产一区二区三区久久久蜜月 | 日韩视频一区二区在线观看| 亚洲美女免费在线| 国产aⅴ精品一区二区三区色成熟| 欧美妇女性影城| 亚洲激情在线播放| 成人h动漫精品一区二| 亚洲精品在线免费观看视频| 视频一区在线视频| 欧美综合久久久| 亚洲伦理在线精品| 99麻豆久久久国产精品免费| 午夜日韩在线电影| 欧美va亚洲va| 亚洲国产精品一区二区久久恐怖片| 国产一区二区在线观看视频| 91精品国产高清一区二区三区| 亚洲一区在线免费观看| www.亚洲人| 中文字幕日韩av资源站| 成人精品视频网站| 亚洲国产精品高清| 成人精品高清在线| 国产精品美女视频| 高清日韩电视剧大全免费| 亚洲精品在线观看网站| 精品一区二区国语对白| 精品噜噜噜噜久久久久久久久试看 | 午夜免费久久看| 欧美日韩国产经典色站一区二区三区 |