vc浏览器:VC制作资源浏览器



  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)
{
 //ReturnTRUEthedrivedoesn’tsupportremovablemedia.
 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类里面定义些共用成员变量
Tags:  占资源最少的浏览器 远教资源浏览器 vc浏览器控件 vc浏览器

延伸阅读

最新评论

发表评论