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

📄 mytreectrl.cpp

📁 直接对磁盘的bit数据进行读写
💻 CPP
字号:
// MyTreeCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "MFCFatline.h"
#include "MyTreeCtrl.h"


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

/////////////////////////////////////////////////////////////////////////////
// CMyTreeCtrl

 CMyTreeCtrl::CMyTreeCtrl()
 {
	 FATBuffer=new BYTE[512*8+1];
	 FDTBuffer=new BYTE[512*8+1];

 }

CMyTreeCtrl::~CMyTreeCtrl()
{
	delete[]FATBuffer;
	delete[]FDTBuffer;
}


BEGIN_MESSAGE_MAP(CMyTreeCtrl, CTreeCtrl)
	//{{AFX_MSG_MAP(CMyTreeCtrl)
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
	ON_NOTIFY_REFLECT(TVN_ITEMEXPANDED, OnItemexpanded)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyTreeCtrl message handlers
void CMyTreeCtrl::Init()
{
	DWORD dwStyle = GetWindowLong(m_hWnd,GWL_STYLE);
	dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;
	SetWindowLong(m_hWnd,GWL_STYLE,dwStyle);
    m_hRoot = InsertItem("我的电脑");
	GetLogicalDrives(m_hRoot);
	GetDriveDir(m_hRoot);
	Expand(m_hRoot,TVE_EXPAND);


}
//////////////////////////////////////////////////////////////////////////
////函数功能:获取驱动器
//////////////////////////////////////////////////////////////////////////
void CMyTreeCtrl::GetLogicalDrives(HTREEITEM hParent)
{
	
    size_t szAllDriveStrings = GetLogicalDriveStrings(0,NULL);//获得要存放驱动器名buffer的大小
	char *pDriveStrings = new char[szAllDriveStrings + sizeof(_T(""))];//初始化buffer,结尾以0结尾
	GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);//获取驱动器名称
	size_t szDriveString = strlen(pDriveStrings);//获取每个驱动器名称所占的大小
	while(szDriveString > 0)
	{
		if(GetDriveType(pDriveStrings)== DRIVE_CDROM)
		{	
			pDriveStrings += szDriveString + 1;
			szDriveString = strlen(pDriveStrings);
			continue;
		}
		InsertItem(pDriveStrings,hParent,TVI_LAST);//将驱动器的名字插入到树控件
		pDriveStrings += szDriveString + 1;//移动指针到下一个驱动器名字
		szDriveString = strlen(pDriveStrings);//获取下一个驱动器名的大小
	}
}

/////////////////////////////////////////////////////////////
//获取驱动器目录下的子项
//////////////////////////////////////////////////////////////////////////
void CMyTreeCtrl::GetDriveDir(HTREEITEM hParent)
{
    HTREEITEM hChild =GetChildItem(hParent);
	while(hChild)
	{
        CString strText =GetItemText(hChild);//获得树空间中第一个分区的文本内容
		if(strText.Right(1) != "\\")//判断分区名称的后面是否有“\”
			strText += _T("\\");//如果没有“\”,添加
		strText += "*.*";
		CFileFind file;
		BOOL bContinue = file.FindFile(strText);
		while(bContinue)
		{
            bContinue = file.FindNextFile(); 
			if( !file.IsDots())
				InsertItem(file.GetFileName(),hChild);
		}
		GetDriveDir(hChild);
		hChild = GetNextItem(hChild,TVGN_NEXT);
	}	
}

///////////////////////////////////////////////////////////////////////////////
//单击文件 显示磁盘中对应数据区
//单击目录 显示磁盘中对应的目录内的内容(即该目录下的FDT)
//单击分区 显示该分区的DBR,同时修改CMFCFATLineDlg中的comboBox和m_biaoti内容
//以上内容都显示在 CMFCFATLineDlg中的 edit中
//////////////////////////////////////////////////////////////////////////////
void CMyTreeCtrl::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
/*	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	TVITEM item = pNMTreeView->itemNew;
	if(item.hItem == m_hRoot)//如果是根目录


//	if(item.hItem==)


	CString str = GetFullPath(item.hItem);
    if(str.Right(1) != "\\")
		str += "\\";
	str += "*.*";
	CFileFind file;
	BOOL bContinue = file.FindFile(str);
	while(bContinue)
	{
		bContinue = file.FindNextFile();
		if(!file.IsDirectory() && !file.IsDots())
		{
			SHFILEINFO info;
			CString temp = str;
			int index = temp.Find("*.*");
			temp.Delete(index,3);
			SHGetFileInfo(temp + file.GetFileName(),0,&info,sizeof(&info),SHGFI_DISPLAYNAME | SHGFI_ICON);
			int i = m_ImageList.Add(info.hIcon);
			m_list.InsertItem(i,info.szDisplayName,i);
		}
	}
	*/
	*pResult = 0;
}
//////////////////////////////////////////////////////////////////////////
////函数功能:展开事件函数
//////////////////////////////////////////////////////////////////////////
void CMyTreeCtrl::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult) 
{
	
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	TVITEM item = pNMTreeView->itemNew;
	if(item.hItem == m_hRoot)
		return;
    HTREEITEM hChild = GetChildItem(item.hItem);
	while(hChild)
	{
		AddSubDir(hChild);
		hChild = GetNextItem(hChild,TVGN_NEXT);
	}
	
	*pResult = 0;
	

}
//////////////////////////////////////////////////////////////////////////
//函数功能:获取树项目全跟径
//////////////////////////////////////////////////////////////////////////
CString CMyTreeCtrl::GetFullPath(HTREEITEM hCurrent)
{
    CString strTemp;
	CString strReturn = "";
	while(hCurrent != m_hRoot)
	{
		strTemp = GetItemText(hCurrent);
		if(strTemp.Right(1) != "\\")
			strTemp += "\\";
		strReturn = strTemp  + strReturn;
		hCurrent = GetParentItem(hCurrent);
	}
	return strReturn;
}
//////////////////////////////////////////////////////////////////////////
//添加子目录
//////////////////////////////////////////////////////////////////////////
void CMyTreeCtrl::AddSubDir(HTREEITEM hParent)
{
    CString strPath = GetFullPath(hParent);
	if(strPath.Right(1) != "\\")
		strPath += "\\";
	strPath += "*.*";
	CFileFind file;
	BOOL bContinue = file.FindFile(strPath);
	while(bContinue)
	{
		bContinue = file.FindNextFile();
		//if(file.IsDirectory() && !file.IsDots())
		if(!file.IsDots())
			InsertItem(file.GetFileName(),hParent);
	}
}

⌨️ 快捷键说明

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