3、代码
///////////////////////////////////////////////////////LeftView.h:erfaceoftheCLeftView
#!d(AFX_LEFTVIEW_H__29F66875_4E46_11D6_9693_B383368EF622__INCLUDED_)
#AFX_LEFTVIEW_H__29F66875_4E46_11D6_9693_B383368EF622__INCLUDED_
#_MSC_VER>1000
#pragmaonce
#end//_MSC_VER>1000
CDriveExplorerDoc;
CLeftView:publicCTreeView
{
protected://createfromserializationonly
CLeftView;
DECLARE_DYNCREATE(CLeftView)
//Attributes
public:
CDriveExplorerDoc*GetDocument;
CImageList*m_pImageList;
CStringm_LocalPath;
//Operations
public:
BOOLHasSubdirectory(CString&strPathName);
BOOLIsDriveNode(HTREEITEMhItem);
voidSetButtonState(HTREEITEMhItem,CString&strPathName);
UINTAddDirectoryNodes(HTREEITEMhItem,CString&strPathName);
BOOLIsMediaValid(CString&strPathName);
HTREEITEMGetDriveNode(HTREEITEMhItem);
UINTDeleteChildren(HTREEITEMhItem);
BOOLIsPathValid(CString&strPathName);
CStringGetPathFromItem(HTREEITEMhItem);
voidAddDummyNode(HTREEITEMhItem);
voidInitTreeView(HTREEITEMhParent);
BOOLAddDrives(CStringstrDrive,HTREEITEMhParent);
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CLeftView)
public:
virtualvoidOnDraw(CDC*pDC);//overriddentodrawthisview
virtualBOOLPreCreateWindow(CREATESTRUCT&cs);
protected:
virtualBOOLOnPreparePring(CPrInfo*pInfo);
virtualvoidOnBeginPring(CDC*pDC,CPrInfo*pInfo);
virtualvoidOnEndPring(CDC*pDC,CPrInfo*pInfo);
virtualvoidOnInitialUpdate;//calledfirsttimeafterconstruct
//}}AFX_VIRTUAL
//Implementation
public:
virtual~CLeftView;
#def_DEBUG
virtualvoidAssertValidconst;
virtualvoidDump(CDumpContext&dc)const;
#end
protected:
//Generatedmessagemapfunctions
protected:
//{{AFX_MSG(CLeftView)
//NOTE-theClassWizardwilladdandremovememberfunctionshere.
//DONOTEDITwhatyouseeheseblocksofgeneratedcode!
afx_msgvoidOnDestroy;
afx_msgvoidOnItemexpanding(NMHDR*pNMHDR,LRESULT*pResult);
afx_msgvoidOnSelchanging(NMHDR*pNMHDR,LRESULT*pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP
};
#ndef_DEBUG//debugversioninLeftView.cpp
inlineCDriveExplorerDoc*CLeftView::GetDocument
{(CDriveExplorerDoc*)m_pDocument;}
#end
#end
//////////////////////////////////////////////////////////CLeftView
#"stdafx.h"
#"DriveExplorer.h"
#"DriveExplorerDoc.h"
#"LeftView.h"
#"DriveExplorerView.h"
#def_DEBUG
#DEBUG_NEW
#undefTHIS_FILE
charTHIS_FILE=__FILE__;
#end
#ILI_CDDRV0
#ILI_CLSDFLD1
#ILI_DRIVE2
#ILI_FLOPPYDRV3
#ILI_MYCOMP4
#ILI_OPENFLD5
#ILI_TEXTFILE6
#MYCOMPUTER"MyComputer"
IMPLEMENT_DYNCREATE(CLeftView,CTreeView)
BEGIN_MESSAGE_MAP(CLeftView,CTreeView)
//{{AFX_MSG_MAP(CLeftView)
//NOTE-theClassWizardwilladdandremovemappingmacroshere.
//DONOTEDITwhatyouseeheseblocksofgeneratedcode!
ON_WM_DESTROY
ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING,OnItemexpanding)
ON_NOTIFY_REFLECT(TVN_SELCHANGING,OnSelchanging)
//}}AFX_MSG_MAP
//Standardpringcommands
ON_COMMAND(ID_FILE_PRINT,CTreeView::OnFilePr)
ON_COMMAND(ID_FILE_PRINT_DIRECT,CTreeView::OnFilePr)
ON_COMMAND(ID_FILE_PRINT_PREVIEW,CTreeView::OnFilePrPreview)
END_MESSAGE_MAP
/////////////////////////////////////CLeftViewconstruction/destruction
CLeftView::CLeftView
{
//TODO:addconstructioncodehere
}
CLeftView::~CLeftView
{}
BOOLCLeftView::PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:ModytheWindoworstylesherebymodyingtheCREATESTRUCTcs
cs.style|=TVS_HASBUTTONS|TVS_LINESATROOT|TVS_HASLINES;
CTreeView::PreCreateWindow(cs);
}
voidCLeftView::OnDraw(CDC*pDC)
{
CDriveExplorerDoc*pDoc=GetDocument;
ASSERT_VALID(pDoc);
//TODO:adddrawcodefornativedatahere
}
BOOLCLeftView::OnPreparePring(CPrInfo*pInfo)
{
//defaultpreparation
DoPreparePring(pInfo);
}
voidCLeftView::OnBeginPring(CDC*/*pDC*/,CPrInfo*/*pInfo*/)
{
//TODO:addextrainitializationbeforepring
}
voidCLeftView::OnEndPring(CDC*/*pDC*/,CPrInfo*/*pInfo*/)
{
//TODO:addcleanupafterpring
}
voidCLeftView::OnInitialUpdate
{
CTreeView::OnInitialUpdate;
m_pImageList=CImageList;
CWinApp*pApp=AfxGetApp;
//ASSERT(m_pImageList!=NULL);//seriousallocationfailurechecking
m_pImageList->Create(16,16,ILC_COLOR8|ILC_MASK,9,9);
m_pImageList->Add(pApp->LoadIcon(ICO_CDDRV));
m_pImageList->Add(pApp->LoadIcon(ICO_CLSDFLD));
m_pImageList->Add(pApp->LoadIcon(ICO_DRIVE));
m_pImageList->Add(pApp->LoadIcon(ICO_FLOPPYDRV));
m_pImageList->Add(pApp->LoadIcon(ICO_MYCOMP));
m_pImageList->Add(pApp->LoadIcon(ICO_OPENFLD));
m_pImageList->Add(pApp->LoadIcon(ICO_TEXTFILE));
GetTreeCtrl.SetImageList(m_pImageList,TVSIL_NORMAL);
HTREEITEMhParent=GetTreeCtrl.InsertItem(MYCOMPUTER,
ILI_MYCOMP,ILI_MYCOMP);
InitTreeView(hParent);
GetTreeCtrl.Expand(hParent,TVE_EXPAND);
}
#def_DEBUG
voidCLeftView::AssertValidconst
{
CTreeView::AssertValid;
}
voidCLeftView::Dump(CDumpContext&dc)const
{
CTreeView::Dump(dc);
}
CDriveExplorerDoc*CLeftView::GetDocument//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDriveExplorerDoc)));
(CDriveExplorerDoc*)m_pDocument;
}
#end//_DEBUG
voidCLeftView::InitTreeView(HTREEITEMhParent)
{
nPos=0;
UINTnCount=0;
CStringstrDrive="?:\\\\";
DWORDdwDriveList=::GetLogicalDrives;
CStringcTmp;
while(dwDriveList){
(dwDriveList&1){
cTmp=strDrive;
strDrive.SetAt(0,0x41+nPos);
(AddDrives(strDrive,hParent))
nCount;
}
dwDriveList>>=1;
nPos;
}
;
}
BOOLCLeftView::AddDrives(CStringstrDrive,HTREEITEMhParent)
{
HTREEITEMhItem;
UINTnType=::GetDriveType((LPCTSTR)strDrive);
UINTnDrive=(UINT)strDrive[0]-0x41;
switch(nType){
DRIVE_REMOVABLE:
hItem=GetTreeCtrl.InsertItem(strDrive,ILI_FLOPPYDRV,ILI_FLOPPYDRV,hParent);
AddDummyNode(hItem);
;
DRIVE_FIXED:
hItem=GetTreeCtrl.InsertItem(strDrive,ILI_DRIVE,ILI_DRIVE,hParent);
AddDummyNode(hItem);
;
DRIVE_REMOTE:
hItem=GetTreeCtrl.InsertItem(strDrive,ILI_DRIVE,ILI_DRIVE,hParent);
AddDummyNode(hItem);
;
DRIVE_CDROM:
hItem=GetTreeCtrl.InsertItem(strDrive,ILI_CDDRV,ILI_CDDRV,hParent);
AddDummyNode(hItem);
;
DRIVE_RAMDISK:
hItem=GetTreeCtrl.InsertItem(strDrive,ILI_CDDRV,ILI_CDDRV,hParent);
AddDummyNode(hItem);
;
default:
FALSE;
}
true;
}
voidCLeftView::OnDestroy
{
CTreeView::OnDestroy;
//TODO:Addyourmessagehandlercodehere
(m_pImageList!=NULL)
m_pImageList=NULL;
deletem_pImageList;
}
voidCLeftView::AddDummyNode(HTREEITEMhItem)
{
GetTreeCtrl.InsertItem("",0,0,hItem);
}
CStringCLeftView::GetPathFromItem(HTREEITEMhItem)
{
CStringstrPathName;
while(hItem!=NULL)
{
CString=GetTreeCtrl.GetItemText(hItem);
((.Right(1)!="\\\\")&&!strPathName.IsEmpty)
"\\\\";
strPathName=+strPathName;
hItem=GetTreeCtrl.GetParentItem(hItem);
}
(strPathName.Left(11)MYCOMPUTER&&strPathName.GetLength>11)
strPathName=strPathName.Mid(12);
strPathName;
}
BOOLCLeftView::IsPathValid(CString&strPathName)
{
(strPathName.GetLength3)
TRUE;
HANDLEhFind;
WIN32_FIND_DATAfd;
BOOLbResult=FALSE;
((hFind=::FindFirstFile((LPCTSTR)strPathName,&fd))!=INVALID_HANDLE_VALUE){
(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
bResult=TRUE;
::CloseHandle(hFind);
}
bResult;
}
BOOLCLeftView::IsMediaValid(CString&strPathName)
{
//ReturnTRUEthedrivedoesntsupportremovablemedia.
UINTnDriveType=GetDriveType((LPCTSTR)strPathName);
((nDriveType!=DRIVE_REMOVABLE)&&(nDriveType!=DRIVE_CDROM))
TRUE;
}
HTREEITEMCLeftView::GetDriveNode(HTREEITEMhItem)
{
HTREEITEMhParent;
do{
hParent=GetTreeCtrl.GetParentItem(hItem);
(hParent!=NULL)
hItem=hParent;
}while(hParent!=NULL);
hItem;
}
UINTCLeftView::DeleteChildren(HTREEITEMhItem)
{
UINTnCount=0;
HTREEITEMhChild=GetTreeCtrl.GetChildItem(hItem);
while(hChild!=NULL){
HTREEITEMhNextItem=GetTreeCtrl.GetNextSiblingItem(hChild);
GetTreeCtrl.DeleteItem(hChild);
hChild=hNextItem;
nCount;
}
nCount;
}
UINTCLeftView::AddDirectoryNodes(HTREEITEMhItem,CString&strPathName)
{
HANDLEhFind;
WIN32_FIND_DATAfd;
UINTnCount=0;
CStringstrFileSpec=strPathName;
(strFileSpec.Right(1)!="\\\\")
strFileSpec"\\\\";
strFileSpec"*.*";
((hFind=::FindFirstFile((LPCTSTR)strFileSpec,&fd))INVALID_HANDLE_VALUE)
{
(IsDriveNode(hItem))
AddDummyNode(hItem);
0;
}
CWaitCursorwait;
CDriveExplorerDoc*pDoc=GetDocument;
pDoc->m_ExplorerView->DeleteAllItems;
do{
(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CStringstrFileName=(LPCTSTR)&fd.cFileName;
((strFileName!=".")&&(strFileName!="..")&&(fd.dwFileAttributes!=22))
{
HTREEITEMhChild=GetTreeCtrl.InsertItem((LPCTSTR)&fd.cFileName,ILI_CLSDFLD,ILI_OPENFLD,hItem,TVI_SORT);
CStringstrNewPathName=strPathName;
(strNewPathName.Right(1)!="\\\\")
strNewPathName"\\\\";
strNewPathName(LPCTSTR)&fd.cFileName;
SetButtonState(hChild,strNewPathName);
nCount;
}
}
{
pDoc->m_ExplorerView->AddToListView(&fd);
}
}while(::FindNextFile(hFind,&fd));
::FindClose(hFind);
nCount;
}
voidCLeftView::SetButtonState(HTREEITEMhItem,CString&strPathName)
{
(HasSubdirectory(strPathName))
AddDummyNode(hItem);
}
BOOLCLeftView::HasSubdirectory(CString&strPathName)
{
HANDLEhFind;
WIN32_FIND_DATAfd;
BOOLbResult=FALSE;
CStringstrFileSpec=strPathName;
(strFileSpec.Right(1)!="\\\\")
strFileSpec"\\\\";
strFileSpec"*.*";
((hFind=::FindFirstFile((LPCTSTR)strFileSpec,&fd))!=INVALID_HANDLE_VALUE)
{
do{
(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CStringstrFileName=(LPCTSTR)&fd.cFileName;
((strFileName!=".")&&(strFileName!=".."))
bResult=TRUE;
}
}while(::FindNextFile(hFind,&fd)&&!bResult);
::FindClose(hFind);
}
bResult;
}
BOOLCLeftView::IsDriveNode(HTREEITEMhItem)
{
(GetTreeCtrl.GetParentItem(hItem)NULL)?TRUE:FALSE;
}
voidCLeftView::OnItemexpanding(NMHDR*pNMHDR,LRESULT*pResult)
{
NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;
HTREEITEMhItem=pNMTreeView->itemNew.hItem;
CStringstrPathName=GetPathFromItem(hItem);
(!IsMediaValid(strPathName))
{
HTREEITEMhRoot=GetDriveNode(hItem);
GetTreeCtrl.Expand(hRoot,TVE_COLLAPSE);
DeleteChildren(hRoot);
AddDummyNode(hRoot);
*pResult=TRUE;
;
}
//DeletetheitemstrPathNamenolongerspeciesavalidpath.
(!IsPathValid(strPathName))
{
(strPathName!=MYCOMPUTER&&strPathName!="")
{
GetTreeCtrl.DeleteItem(hItem);
*pResult=TRUE;
;
}
}
CWaitCursorwait;
(pNMTreeView->actionTVE_EXPAND)
{
(strPathName!=MYCOMPUTER)
{
DeleteChildren(hItem);
(!AddDirectoryNodes(hItem,strPathName))
*pResult=TRUE;
}
}
{
(strPathName!=MYCOMPUTER)
{
DeleteChildren(hItem);
(IsDriveNode(hItem))
AddDummyNode(hItem);
SetButtonState(hItem,strPathName);
}
}
m_LocalPath=strPathName;
*pResult=0;
}
voidCLeftView::OnSelchanging(NMHDR*pNMHDR,LRESULT*pResult)
{
NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;
//TODO:Addyourcontrolnoticationhandlercodehere
HTREEITEMhItem=pNMTreeView->itemNew.hItem;
CStringstrPathName=GetPathFromItem(hItem);
*pResult=FALSE;
(strPathNameMYCOMPUTER)
;
CWaitCursorwait;
(!AddDirectoryNodes(hItem,strPathName))
*pResult=TRUE;
m_LocalPath=strPathName;
*pResult=0;
}
//////////////////////////////////////DriveExplorerView.h:erfaceoftheCDriveExplorerView
#!d(AFX_DRIVEEXPLORERVIEW_H__29F66873_4E46_11D6_9693_B383368EF622__INCLUDED_)
#AFX_DRIVEEXPLORERVIEW_H__29F66873_4E46_11D6_9693_B383368EF622__INCLUDED_
#_MSC_VER>1000
#pragmaonce
#end//_MSC_VER>1000
CDriveExplorerView:publicCListView
{
protected://createfromserializationonly
CDriveExplorerView;
DECLARE_DYNCREATE(CDriveExplorerView)
//Attributes
public:
CDriveExplorerDoc*GetDocument;
CImageList*m_pImageList;
CImageList*m_pImageListL;
//Operations
public:
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CDriveExplorerView)
public:
virtualvoidOnDraw(CDC*pDC);//overriddentodrawthisview
virtualBOOLPreCreateWindow(CREATESTRUCT&cs);
protected:
virtualvoidOnInitialUpdate;//calledfirsttimeafterconstruct
virtualBOOLOnPreparePring(CPrInfo*pInfo);
virtualvoidOnBeginPring(CDC*pDC,CPrInfo*pInfo);
virtualvoidOnEndPring(CDC*pDC,CPrInfo*pInfo);
//}}AFX_VIRTUAL
//Implementation
public:
voidSetupImages(CImageList*mImageList,iSize);
UINTGetListViewIcon(CStrings);
CStringGetFileType(CStrings);
LPTSTRGetNTS(CStringcString);
voidAddToListView(WIN32_FIND_DATA*fd);
voidDeleteAllItems;
virtual~CDriveExplorerView;
#def_DEBUG
virtualvoidAssertValidconst;
virtualvoidDump(CDumpContext&dc)const;
#end
protected:
//Generatedmessagemapfunctions
protected:
//{{AFX_MSG(CDriveExplorerView)
afx_msgvoidOnDestroy;
afx_msgvoidOnSize(UINTnType,cx,cy);
//}}AFX_MSG
afx_msgvoidOnStyleChanged(nStyleType,LPSTYLESTRUCTlpStyleStruct);
DECLARE_MESSAGE_MAP
};
#ndef_DEBUG//debugversioninDriveExplorerView.cpp
inlineCDriveExplorerDoc*CDriveExplorerView::GetDocument
{(CDriveExplorerDoc*)m_pDocument;}
#end
#end
////////////////////////////////DriveExplorerView.cpp:implementationoftheCDriveExplorerView
#"stdafx.h"
#"DriveExplorer.h"
#"DriveExplorerDoc.h"
#"DriveExplorerView.h"
#def_DEBUG
#DEBUG_NEW
#undefTHIS_FILE
charTHIS_FILE=__FILE__;
#end
#ICI_ACCESSFILE0
#ICI_C_SOURCE1
#ICI_CDDRV2
#ICI_CLSDFLD3
#ICI_CURSORFILE4
#ICI_DRIVE5
#ICI_DRIVERSFILE6
#ICI_ERROR7
#ICI_EXCELFILE8
#ICI_EXCLAMATION9
#ICI_EXEFILE10
#ICI_FLOPPYDRV11
#ICI_FONTFILE12
#ICI_FOXPROFILE13
#ICI_GENERALFILE14
#ICI_HEADERFILE15
#ICI_HELPFILE16
#ICI_HTMLDOC17
#ICI_HTMLHELP18
#ICI_IMAGEFILE19
#ICI_INFO20
#ICI_JAVABEAN21
#ICI_JAVACLASSES22
#ICI_JAVASOURCE23
#ICI_MYCOMPUTER24
#ICI_OPENFLD25
#ICI_PDFFILE26
#ICI_QUESTION27
#ICI_REGISTRYFILE28
#ICI_SETUPFILE29
#ICI_SOUNDFILE30
#ICI_TEXTFILE31
#ICI_TRASHFILE32
#ICI_UNINSTALLFILE33
#ICI_VIDEOFILE34
#ICI_WINDOWSFILE35
#ICI_WORDDOC36
#ICI_ZIPFILE37
#ICI_CDUP38
/////////////////////////////////////////////////////////////CDriveExplorerView
IMPLEMENT_DYNCREATE(CDriveExplorerView,CListView)
BEGIN_MESSAGE_MAP(CDriveExplorerView,CListView)
//{{AFX_MSG_MAP(CDriveExplorerView)
ON_WM_DESTROY
ON_WM_SIZE
//}}AFX_MSG_MAP
END_MESSAGE_MAP
CDriveExplorerView::CDriveExplorerView
{
//TODO:addconstructioncodehere
}
CDriveExplorerView::~CDriveExplorerView
{}
BOOLCDriveExplorerView::PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:ModytheWindoworstylesherebymodying
//theCREATESTRUCTcs
cs.style|=LVS_REPORT;
CListView::PreCreateWindow(cs);
}
voidCDriveExplorerView::OnDraw(CDC*pDC)
{
CDriveExplorerDoc*pDoc=GetDocument;
ASSERT_VALID(pDoc);
CListCtrl&refCtrl=GetListCtrl;
refCtrl.InsertItem(0,"Item!");
//TODO:adddrawcodefornativedatahere
}
voidCDriveExplorerView::OnInitialUpdate
{
CListView::OnInitialUpdate;
CDriveExplorerDoc*pDoc=GetDocument;
pDoc->m_ExplorerView=this;
CRectrect;
GetClientRect(&rect);
GetListCtrl.InsertColumn(0,"FileName",LVCFMT_LEFT,rect.right/2,-1);
GetListCtrl.InsertColumn(1,"Size",LVCFMT_LEFT,rect.right/4,-1);
GetListCtrl.InsertColumn(2,"Date",LVCFMT_LEFT,rect.right/4,-1);
m_pImageList=CImageList;
m_pImageListL=CImageList;
SetupImages(m_pImageList,16);
SetupImages(m_pImageListL,32);
GetListCtrl.SetImageList(m_pImageList,LVSIL_SMALL);
GetListCtrl.SetImageList(m_pImageListL,LVSIL_NORMAL);
}
#def_DEBUG
voidCDriveExplorerView::AssertValidconst
{
CListView::AssertValid;
}
voidCDriveExplorerView::Dump(CDumpContext&dc)const
{
CListView::Dump(dc);
}
CDriveExplorerDoc*CDriveExplorerView::GetDocument//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDriveExplorerDoc)));
(CDriveExplorerDoc*)m_pDocument;
}
#end//_DEBUG
voidCDriveExplorerView::OnStyleChanged(nStyleType,LPSTYLESTRUCTlpStyleStruct)
{
//TODO:addcodetoreacttotheuserchangingtheviewstyleofyourwindow
}
voidCDriveExplorerView::DeleteAllItems
{
GetListCtrl.DeleteAllItems;
}
voidCDriveExplorerView::AddToListView(WIN32_FIND_DATA*fd)
{
LV_ITEMlvitem;
charsNumBuff[100];
iActualItem;
CStringsText;
lvitem.mask=LVIF_TEXT|LVIF_IMAGE;
lvitem.iItem=0;
lvitem.iSubItem=0;
lvitem.pszText=GetNTS(fd->cFileName);//fd.cFileName;
lvitem.iImage=GetListViewIcon(fd->cFileName);//SetFileIcon(fd->GetFileName);
iActualItem=GetListCtrl.InsertItem(&lvitem);
//AddAttributecolumn
lvitem.mask=LVIF_TEXT;
lvitem.iItem=iActualItem;
lvitem.iSubItem=1;
lvitem.pszText=GetNTS(GetFileType(fd->cFileName));
GetListCtrl.SetItem(&lvitem);
//AddSizecolumn
(fd->nFileSizeLow!=0)
ltoa((long)fd->nFileSizeLow,sNumBuff,10);
strcpy(sNumBuff,"");
lvitem.mask=LVIF_TEXT;
lvitem.iItem=iActualItem;
lvitem.iSubItem=2;
lvitem.pszText=sNumBuff;
GetListCtrl.SetItem(&lvitem);
//AddTimecolumn
CTimerefTime;
refTime=fd->ftCreationTime;
sText=refTime.Format("%b-%d-%Y");
lvitem.mask=LVIF_TEXT;
lvitem.iItem=iActualItem;
lvitem.iSubItem=3;
lvitem.pszText=sText.GetBuffer(sText.GetLength);
GetListCtrl.SetItem(&lvitem);
}
LPTSTRCDriveExplorerView::GetNTS(CStringcString)
{
LPTSTRlpsz=TCHAR[cString.GetLength+1];
_tcscpy(lpsz,cString);
lpsz;
}
CStringCDriveExplorerView::GetFileType(CStrings)
{
CStringcResult;
nFoundAt=s.Find(".",0);
s.MakeUpper;
(nFoundAt0)
s+"File";
CStringext=s.Mid(nFoundAt);
(ext".PDF")"PDFFile";
(ext".CPP")"VCSource";
(ext".H")"HeaderFile";
(ext".C")"CSource";
(s"SETUP.EXE")"SETUPFile";
(s"ISUNINST.EXE")"UNINSTALLFile";
(ext".TXT"||ext".LOG")"TEXTFile";
(ext".ZIP"||ext".ARJ"||ext".TGZ"||ext".RAR"||ext".TAR"||ext".LZH"||
ext".LZA"||ext".CAB")
"ZIPFile";
(ext".EXE"||ext".COM"||ext".BAT")
"Application";
(ext".AU"||ext".WAV"||ext".MP3")
"SOUNDFile";
(ext".HTM"||ext".HTML")"HTMLDocument";
(ext".DOC")"WORDDocument";
(ext".MPG"||ext".MPEG"||ext".AVI")
ICI_VIDEOFILE;
(ext".HLP")"HELPFile";
(ext".BMP")"BitmapFile";
(ext".ICO")"IconFile";
(ext".DBF"||ext".DBT"||ext".MEM")
"FOXPROFile";
(ext".DLL"||ext".SYS"||ext".OCX"||ext".VXD"||ext".INI"||ext".DRV")
"DRIVERSFile";
(ext".JPG"||ext".GIF"||ext".JPEG"||ext".AIS"||ext".EMF"||ext".IFF"||
ext".KDC"||ext".PCD"||ext".PCX"||ext".PIC"||ext".PIX"||ext".PNG"||
ext".PSD"||ext".SGI"||ext".TIF"||ext".TIFF"||ext".WMF")
"PictureFile";
(ext".TSK"||ext".CPX"||ext".ROM"||ext".CFG"||ext".STF"||ext".LST"||
ext".INF")
"WINDOWSFile";
(ext".CUR"||ext".ANI")"CURSORFile";
(ext".FON")"FONTFile";
(ext".BAK")"BackupFile";
(ext".JAVA")"JAVASource";
(ext".CLASS")"JAVAClass";
(ext".BEAN")"JAVABean";
(ext".REG")"REGISTRYFile";
(ext".MDB")"ACCESSDatabase";
(ext".XLS")"EXCELFile";
(ext".CHM")"HTMLHelp";
{
ext=ext.Mid((ext.Find(.,0)!=-1?1:0));
ext+"File";
}
cResult;
}
UINTCDriveExplorerView::GetListViewIcon(CStrings)
{
nFoundAt=s.Find(".",1);
s.MakeUpper;
(nFoundAt0)
ICI_GENERALFILE;
CStringext=s.Mid(nFoundAt);
//Setsomestandardicontypes
(ext".PDF")ICI_PDFFILE;
(s"SETUP.EXE")ICI_SETUPFILE;
(s"ISUNINST.EXE")ICI_UNINSTALLFILE;
(ext".TXT"||ext".LOG")ICI_TEXTFILE;
(ext".ZIP"||ext".ARJ"||ext".TGZ"||ext".RAR"||ext".TAR"||ext".LZH"||
ext".LZA"||ext".CAB")
ICI_ZIPFILE;
(ext".EXE"||ext".COM"||ext".BAT")
ICI_EXEFILE;
(ext".AU"||ext".WAV"||ext".MP3")
ICI_SOUNDFILE;
(ext".HTM"||ext".HTML")ICI_HTMLDOC;
(ext".DOC")ICI_WORDDOC;
(ext".MPG"||ext".MPEG"||ext".AVI")
ICI_VIDEOFILE;
(ext".HLP")ICI_HELPFILE;
(ext".BMP")ICI_IMAGEFILE;
(ext".ICO")ICI_IMAGEFILE;
(ext".DBF"||ext".DBT"||ext".MEM")
ICI_FOXPROFILE;
(ext".DLL"||ext".SYS"||ext".OCX"||ext".VXD"||ext".INI"||ext".DRV")
ICI_DRIVERSFILE;
(ext".JPG"||ext".GIF"||ext".JPEG"||ext".AIS"||ext".EMF"||ext".IFF"||
ext".KDC"||ext".PCD"||ext".PCX"||ext".PIC"||ext".PIX"||ext".PNG"||
ext".PSD"||ext".SGI"||ext".TIF"||ext".TIFF"||ext".WMF")
ICI_IMAGEFILE;
(ext".TSK"||ext".CPX"||ext".ROM"||ext".CFG"||ext".STF"||ext".LST"||
ext".INF")
ICI_WINDOWSFILE;
(ext".CUR"||ext".ANI")ICI_CURSORFILE;
(ext".FON")ICI_FONTFILE;
(ext".BAK")ICI_TRASHFILE;
(ext".JAVA")ICI_JAVASOURCE;
(ext".CLASS")ICI_JAVACLASSES;
(ext".BEAN")ICI_JAVABEAN;
(ext".REG")ICI_REGISTRYFILE;
(ext".MDB")ICI_ACCESSFILE;
(ext".XLS")ICI_EXCELFILE;
(ext".CHM")ICI_HTMLHELP;
ICI_GENERALFILE;
}
voidCDriveExplorerView::SetupImages(CImageList*mImageList,iSize)
{
CWinApp*pApp=AfxGetApp;
//ASSERT(m_pImageList!=NULL);//seriousallocationfailurechecking
mImageList->Create(iSize,iSize,ILC_COLOR8|ILC_MASK,9,9);
mImageList->Add(pApp->LoadIcon(ICO_ACCESSFILE));
mImageList->Add(pApp->LoadIcon(ICO_C_SOURCE));
mImageList->Add(pApp->LoadIcon(ICO_CDDRV));
mImageList->Add(pApp->LoadIcon(ICO_CLSDFLD));
mImageList->Add(pApp->LoadIcon(ICO_CURSORFILE));
mImageList->Add(pApp->LoadIcon(ICO_DRIVE));
mImageList->Add(pApp->LoadIcon(ICO_DRIVERSFILE));
mImageList->Add(pApp->LoadIcon(ICO_ERROR));
mImageList->Add(pApp->LoadIcon(ICO_EXCELFILE));
mImageList->Add(pApp->LoadIcon(ICO_EXCLAMATION));
mImageList->Add(pApp->LoadIcon(ICO_EXEFILE));
mImageList->Add(pApp->LoadIcon(ICO_FLOPPYDRV));
mImageList->Add(pApp->LoadIcon(ICO_FONTFILE));
mImageList->Add(pApp->LoadIcon(ICO_FOXPROFILE));
mImageList->Add(pApp->LoadIcon(ICO_GENERALFILE));
mImageList->Add(pApp->LoadIcon(ICO_HEADERFILE));
mImageList->Add(pApp->LoadIcon(ICO_HELPFILE));
mImageList->Add(pApp->LoadIcon(ICO_HTMLDOC));
mImageList->Add(pApp->LoadIcon(ICO_HTMLHELP));
mImageList->Add(pApp->LoadIcon(ICO_IMAGEFILE));
mImageList->Add(pApp->LoadIcon(ICO_INFO));
mImageList->Add(pApp->LoadIcon(ICO_JAVABEAN));
mImageList->Add(pApp->LoadIcon(ICO_JAVACLASSES));
mImageList->Add(pApp->LoadIcon(ICO_JAVASOURCE));
mImageList->Add(pApp->LoadIcon(ICO_MYCOMP));
mImageList->Add(pApp->LoadIcon(ICO_OPENFLD));
mImageList->Add(pApp->LoadIcon(ICO_PDFFILE));
mImageList->Add(pApp->LoadIcon(ICO_QUESTION));
mImageList->Add(pApp->LoadIcon(ICO_REGISTRYFILE));
mImageList->Add(pApp->LoadIcon(ICO_SETUPFILE));
mImageList->Add(pApp->LoadIcon(ICO_SOUNDFILE));
mImageList->Add(pApp->LoadIcon(ICO_TEXTFILE));
mImageList->Add(pApp->LoadIcon(ICO_TRASHFILE));
mImageList->Add(pApp->LoadIcon(ICO_UNINSTALLFILE));
mImageList->Add(pApp->LoadIcon(ICO_VIDEOFILE));
mImageList->Add(pApp->LoadIcon(ICO_WINDOWSFILE));
mImageList->Add(pApp->LoadIcon(ICO_WORDDOC));
mImageList->Add(pApp->LoadIcon(ICO_ZIPFILE));
mImageList->Add(pApp->LoadIcon(ICO_CDUP));
;
}
voidCDriveExplorerView::OnDestroy
{
CListView::OnDestroy;
//TODO:Addyourmessagehandlercodehere
(m_pImageList!=NULL)
m_pImageList=NULL;
(m_pImageListL!=NULL)
m_pImageListL=NULL;
deletem_pImageList;
deletem_pImageListL;
}
voidCDriveExplorerView::OnSize(UINTnType,cx,cy)
{
CListView::OnSize(nType,cx,cy);
//TODO:Addyourmessagehandlercodehere
(GetListCtrl.GetSafeHwnd)
{
GetListCtrl.SetColumnWidth(0,cx/2);
GetListCtrl.SetColumnWidth(1,cx/4);
GetListCtrl.SetColumnWidth(2,cx/4);
}
}
///////////////////////////////////////////////////////////////////////////////////
BOOLCMainFrame::OnCreateClient(LPCREATESTRUCT/*lpcs*/,
CCreateContext*pContext)
{
//createsplitterwindow
(!m_wndSplitter.CreateStatic(this,1,2))
FALSE;
(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftView),
CSize(100,100),pContext)||!m_wndSplitter.CreateView(0,1,
RUNTIME_CLASS(CDriveExplorerView),CSize(100,100),pContext))
{
m_wndSplitter.DestroyWindow;
FALSE;
}
m_wndSplitter.SetColumnInfo(0,200,100);
TRUE;
}
CDriveExplorerView*CMainFrame::GetRightPane
{
CDriveExplorerView*pView=(CDriveExplorerView*)m_wndSplitter.GetPane(0,1);
pView;
}
voidCMainFrame::OnUpdateViewStyles(CCmdUI*pCmdUI)
{
CDriveExplorerView*pView=GetRightPane;
(pViewNULL)
pCmdUI->Enable(FALSE);
{
DWORDdwStyle=pView->GetStyle&LVS_TYPEMASK;
(pCmdUI->m_nIDID_VIEW_LINEUP)
{
(dwStyleLVS_ICON||dwStyleLVS_SMALLICON)
pCmdUI->Enable;
pCmdUI->Enable(FALSE);
}
{
//otherwise,usedotstoreflectthestyleoftheview
pCmdUI->Enable;
BOOLbChecked=FALSE;
switch(pCmdUI->m_nID)
{
ID_VIEW_AS_DETAILS:
bChecked=(dwStyleLVS_REPORT);
;
ID_VIEW_AS_SMALLICONS:
bChecked=(dwStyleLVS_SMALLICON);
;
ID_VIEW_AS_LARGEICONS:
bChecked=(dwStyleLVS_ICON);
;
ID_VIEW_AS_LIST:
bChecked=(dwStyleLVS_LIST);
;
default:
bChecked=FALSE;
;
}
pCmdUI->SetRadio(bChecked?1:0);
}
}
}
voidCMainFrame::OnViewStyle(UINTnCommandID)
{
CDriveExplorerView*pView=GetRightPane;
(pView!=NULL)
{
DWORDdwStyle=-1;
switch(nCommandID)
{
ID_VIEW_LINEUP:
{
//askthelistcontroltosnaptogrid
CListCtrl&refListCtrl=pView->GetListCtrl;
refListCtrl.Arrange(LVA_SNAPTOGRID);
}
;
//othercommandschangethestyleonthelistcontrol
ID_VIEW_AS_DETAILS:
dwStyle=LVS_REPORT;
;
ID_VIEW_AS_SMALLICONS:
dwStyle=LVS_SMALLICON;
;
ID_VIEW_AS_LARGEICONS:
dwStyle=LVS_ICON;
;
ID_VIEW_AS_LIST:
dwStyle=LVS_LIST;
;
}
//changethestyle;windowwillrepaautomatically
(dwStyle!=-1)
pView->ModyStyle(LVS_TYPEMASK,dwStyle);
}
}
4、小结
上述代码实现仅仅是资源管理器主要功能只要能够对CListView、CtreeView等类灵活运用在此基础上添加些代码还可以在左右两个视的间实现文件或文件夹拖动功能这时两个视都应该有它们自己实现来进行拖放操作只要不设置"SetCapture()、ReleaseCapture()"被拖放条目就能从原来视拖放到目视如果被拖条目(鼠标下)离开了原来视那么目视WM_MOUSEMOVE消息就获得了该条目控制条件具体实现时要注意保证区别视(原来视以及目视)能访问相同成员变量解决办法是在app类里面定义些共用成员变量
最新评论