⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shortcutpanefolders.cpp

📁 类似Linux操作系统0.11版文件系统的文件系统设计和Windows下的操作程序
💻 CPP
字号:
// ShortcutPaneFolders.cpp: implementation of the CShortcutPaneFolders class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ULExplorer.h"
#include "ShortcutPaneFolders.h"
#include "ULExplorerView.h"
#include "WarningDlg.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

BEGIN_MESSAGE_MAP(CShortcutPaneFolders, CXTPShortcutBarPane)
	ON_NOTIFY(TVN_SELCHANGED, IDC_FOLDERS_TREE, OnSelchanged)
END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CShortcutPaneFolders::CShortcutPaneFolders()
{	
	m_ilTreeIcons.Create(16, 16, ILC_MASK|ILC_COLOR24, 0, 1);

	CBitmap bmp;
	VERIFY(bmp.LoadBitmap(IDB_FILETREE));

	m_ilTreeIcons.Add(&bmp, CXTPImageManager::GetBitmapMaskColor(bmp, CPoint(0, 0)));
}

CShortcutPaneFolders::~CShortcutPaneFolders()
{

}

BOOL CShortcutPaneFolders::Create(LPCTSTR lpszCaption, CXTPShortcutBar* pParent)
{
	if (!CXTPShortcutBarPane::Create(lpszCaption, pParent))
		return FALSE;

	VERIFY(m_wndTreeFolders.Create(WS_VISIBLE|TVS_HASBUTTONS|TVS_LINESATROOT
		| TVS_HASLINES , CXTPEmptyRect(), this, IDC_FOLDERS_TREE));

	m_wndTreeFolders.SetImageList(&m_ilTreeIcons, TVSIL_NORMAL);



	AddItem(_T("目录树"), &m_wndTreeFolders, 115);

	return TRUE;
}

void CShortcutPaneFolders::SetFoldersView(CULExplorerView* pView)
{
	m_pFoldersView = pView;
}
void CShortcutPaneFolders::ShowDentryTree()
{
	if (!theFileSys.IsVDiskLoaded())
		return;

	m_wndTreeFolders.DeleteAllItems();
	HTREEITEM RootNode = m_wndTreeFolders.InsertItem("/", 2, 3);
	ShowDentryTree("/", RootNode);
}
void CShortcutPaneFolders::ShowDentryTree(CString PathName, HTREEITEM TreeNode)
{
	FIND_DATA ff;
	int ret;
	CString tmp;

	CArray<FIND_DATA> array;

	if( (ret=theFileSys.FindFirstFile(PathName.LockBuffer(), &ff))==0 )
	{
		do 
		{
			array.Add(ff);
		} while(!findnextfile(1, &ff));
	}
	else
	{
		TRACE("目录游览失败: path=\"%s\" error=%d\n", PathName, ret);
		return;
	}
	for (int i=0; i<array.GetCount(); i++)
	{
		FIND_DATA& pff = array.ElementAt(i);
		if ( !strcmp(pff.ff_name, ".") || !strcmp(pff.ff_name, "..") ) 
			continue;
		// 目录
		if ( pff.ff_mode == S_IFDIR ) 
		{
			tmp = PathName + CString(pff.ff_name) + "/";
			HTREEITEM Node = m_wndTreeFolders.InsertItem(pff.ff_name, 2, 3, TreeNode);

			ShowDentryTree(tmp, Node);
		}
	}

	m_wndTreeFolders.Expand(TreeNode, TVE_EXPAND);
}
void CShortcutPaneFolders::ExpandDentryTree(CString PathName)
{
	CString tmp = PathName;
	if ( tmp[0] != '/')
	{
		Waring("路径不正确");
		return;
	}
	if ( tmp.GetAt(tmp.GetLength()-1)!='/')
		tmp += "/";
	tmp = tmp.Right(tmp.GetLength()-1);
	HTREEITEM RootNode = m_wndTreeFolders.GetRootItem();
	HTREEITEM Node = ExpandDentryTree(tmp, RootNode);
	if (!Node)
	{
		Waring("路径不正确");
		return;
	}
	m_wndTreeFolders.Expand(Node, TVE_EXPAND);
	m_wndTreeFolders.SelectItem(Node);
}
HTREEITEM CShortcutPaneFolders::ExpandDentryTree(CString strPath, HTREEITEM TreeNode)
{	
	int pos, len;
	CString tmp;
	if ( strPath=="/" || strPath=="") return TreeNode;
	pos = strPath.Find("/",0);
	// 找不到'/'了~
	if (pos <= 0) return NULL;
	tmp = strPath.Left(pos);
	len = strPath.GetLength();

	if (len-pos-1 < 0) return NULL;

	strPath = strPath.Right(len-pos-1);

	HTREEITEM child = m_wndTreeFolders.GetChildItem(TreeNode);
	do 
	{
		if (m_wndTreeFolders.GetItemText(child)==tmp)
		{
			return ExpandDentryTree(strPath, child);
		}
		child = m_wndTreeFolders.GetNextSiblingItem(child);
	} while(child);

	return NULL;
}
CString CShortcutPaneFolders::GetFullPath(HTREEITEM hCurrent)
{
	CString strTemp;
	CString strReturn = "";
	HTREEITEM hRoot = m_wndTreeFolders.GetRootItem();
	while(hCurrent != hRoot)
	{
		strTemp = m_wndTreeFolders.GetItemText(hCurrent);
		if(strTemp.Right(1) != "/")
			strTemp += "/";
		strReturn = strTemp  + strReturn;
		hCurrent = m_wndTreeFolders.GetParentItem(hCurrent);
	}
	strReturn = "/" + strReturn;
	return strReturn;
}
void CShortcutPaneFolders::OnSelchanged(NMHDR* pNMHDR, LRESULT* /*pResult*/) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	CString strFolderPath;

	if (strFolderPath.IsEmpty()) 
	{
		strFolderPath = m_wndTreeFolders.GetItemText(pNMTreeView->itemNew.hItem);
	}

	HTREEITEM hItem = m_wndTreeFolders.GetSelectedItem();
	if (hItem != NULL)
	{
		TRACE("strFolderPath=%s\n",strFolderPath);
	}

	CString m_strPath = GetFullPath(hItem);

	m_pFoldersView->ShowDentryList(m_strPath);
}

void CShortcutPaneFolders::SelectParentItem()
{
	HTREEITEM hItem = m_wndTreeFolders.GetSelectedItem();
	if (hItem==m_wndTreeFolders.GetRootItem())
		return;
	m_wndTreeFolders.SelectItem(m_wndTreeFolders.GetParentItem(hItem));
}
void CShortcutPaneFolders::ClearAll(void)
{
	m_pFoldersView->ClearAll();
	m_wndTreeFolders.DeleteAllItems();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -