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

📄 filelist.cpp

📁 所有压缩格式的压缩解压缩。
💻 CPP
字号:
// FileList.cpp : implementation of the CFileList class
//

#include "stdafx.h"
#include "Compress.h"
#include "FileList.h"
#include "fileinfo.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFileList

CFileListView::CFileListView()
{
}

CFileListView::~CFileListView()
{
}


BEGIN_MESSAGE_MAP(CFileListView,CListView )
	//{{AFX_MSG_MAP(CFileList)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CFileList message handlers

BOOL CFileListView::PreCreateWindow(CREATESTRUCT& cs) 
{

	cs.style |= LVS_EDITLABELS | LVS_REPORT|
			LVS_SHOWSELALWAYS|LVS_SHAREIMAGELISTS;
	return CListView::PreCreateWindow(cs);
}

int CFileListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CListView::OnCreate(lpCreateStruct)==-1)
		return -1;

	return 0;
}
void CFileListView::OnDestroy()
{
	CListCtrl *pList=&GetListCtrl();
	if (pList->GetStyle()&LVS_REPORT)
	{
		int *w=THEAPP->m_UserData.m_TreeWidths;
		for (int i=0;i<8;i++)	w[i]=pList->GetColumnWidth(i);
	}
	CView::OnDestroy();
}

void CFileListView::InsertPath(int nItem,LPCTSTR lpszPath)
{
	CListCtrl *pListCtrl=&GetListCtrl();
	LVITEM lvi;

	CString filetype=GetFileTypeName(lpszPath,TRUE);

	lvi.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
	lvi.iImage=GetFileIcon(lpszPath,1,0);
	lvi.lParam=NULL;
	lvi.iItem=nItem;
	lvi.iSubItem = 0;
	lvi.state = 0;
	lvi.stateMask = 0;
	lvi.pszText=(char*)lpszPath;

	pListCtrl->InsertItem(&lvi);
	pListCtrl->SetItemText(nItem,1,filetype);
}
void CFileListView::InsertFile(int nItem,FILEINDEXLISTNODE *p)
{
	CListCtrl *pListCtrl=&GetListCtrl();
	CString filename,filetype;
	CString tmp;
	LVITEM lvi;

	filename=(p->bIsDirectory)?p->szFileName:GetFileName(p->szFileName);
	filetype=GetFileTypeName(filename,p->bIsDirectory);

	lvi.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
	lvi.iImage=GetFileIcon(p->szFileName,p->bIsDirectory,0);
	lvi.lParam=(LPARAM)p;
	lvi.iItem=nItem;
	lvi.iSubItem = 0;
	lvi.state = 0;
	lvi.stateMask = 0;
	lvi.pszText=(char*)(LPCTSTR)filename;

	pListCtrl->InsertItem(&lvi);
	
	pListCtrl->SetItemText(nItem,1,filetype);	//类型
	tmp.Format("%d",p->dwFileSize);
	pListCtrl->SetItemText(nItem,2,tmp);		//大小
	tmp.Format("%d",p->dwPackedSize);
	pListCtrl->SetItemText(nItem,3,tmp);		//压缩后大小
	if (p->dwFileSize!=0)
		tmp.Format("%d%%",p->dwPackedSize*100/p->dwFileSize);
	else
		tmp.Empty();
	pListCtrl->SetItemText(nItem,4,tmp);		//压缩比
	CTime tm((p->dwDateTime&0xFFFF0000)>>16,p->dwDateTime&0x0000FFFF);
	tmp=tm.Format("%Y-%m-%d %H:%M:%S");
	pListCtrl->SetItemText(nItem,5,tmp);		//修改时间
	tmp = p->dwFileAttr & FILE_ATTRIBUTE_READONLY ? 'r' : '-';
	tmp += p->dwFileAttr & FILE_ATTRIBUTE_ARCHIVE ? 'a' : '-';
	tmp += p->dwFileAttr & FILE_ATTRIBUTE_HIDDEN ? 'h' : '-';
	tmp += p->dwFileAttr & FILE_ATTRIBUTE_SYSTEM ? 's' : '-';
	pListCtrl->SetItemText(nItem,6,tmp);		//属性
	pListCtrl->SetItemText(nItem,7,(LPCTSTR)p->szFileName);//文件全称
}
void CFileListView::LoadList(LPCTSTR lpszFolder)
{
	CCompressDoc *pDoc=THEAPP->m_pDoc;
	if (pDoc->IsClosed()) return;

	int i=0,j,k=0,n;
	CString fname;
	CStringArray strar;

	FILEINDEXLISTNODE *p=pDoc->GetFileListRoot()->next;

	if (lpszFolder)
	{
		while (p)
		{
			n=lstrlen(lpszFolder);
			fname=p->szFileName;
			if (fname.Left(n).CompareNoCase(lpszFolder)==0)
			{
				if (fname[n]=='\\') n++;
				fname.Delete(0,n);
				if ((n=fname.Find('\\',0))>0)
				{
					fname=fname.Left(n);
					j=k-1;
					while (j>=0 && strar[j].CompareNoCase(fname)!=0) j--;
					if (j<0)
					{
						strar.Add(fname);
						k++;
					}
				}
				else if (!p->bIsDirectory)
					InsertFile(i++,p);
			}
			p=p->next;
		}
		for (j=0;j<k;j++) InsertPath(i++,strar[j]);
	}
	else
		while (p)
		{
			InsertFile(i++,p);
			p=p->next;
		}
}

void CFileListView::OnInitialUpdate() 
{
	CListView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	CListCtrl *pListCtrl=&GetListCtrl();
	CString str;

	pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT);
	
	int *w=THEAPP->m_UserData.m_TreeWidths;
	str.LoadString(IDS_LIST_NAME);
	pListCtrl->InsertColumn(0,str,LVCFMT_LEFT,w[0]);
	str.LoadString(IDS_LIST_TYPE);
	pListCtrl->InsertColumn(1,str,LVCFMT_LEFT,w[1]);
	str.LoadString(IDS_LIST_SIZE);
	pListCtrl->InsertColumn(2,str,LVCFMT_RIGHT,w[2]);
	str.LoadString(IDS_LIST_PACKED);
	pListCtrl->InsertColumn(3,str,LVCFMT_RIGHT,w[3]);
	str.LoadString(IDS_LIST_RATIO);
	pListCtrl->InsertColumn(4,str,LVCFMT_RIGHT,w[4]);
	str.LoadString(IDS_LIST_MODIFIED);
	pListCtrl->InsertColumn(5,str,LVCFMT_LEFT,w[5]);
	str.LoadString(IDS_LIST_ATTRIBUTES);
	pListCtrl->InsertColumn(6,str,LVCFMT_LEFT,w[6]);
	str.LoadString(IDS_LIST_FULLNAME);
	pListCtrl->InsertColumn(7,str,LVCFMT_LEFT,w[7]);
}

⌨️ 快捷键说明

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