📄 filelist.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 + -