![]() 图一、资源管理器界面效果图 |
#define DRIVE_UNKNOWN 0 // 无效路径名 #define DRIVE_NO_ROOT_DIR 1 // 无效路经,如无法找到的卷标 #define DRIVE_REMOVABLE 2 // 可移动驱动器(如磁盘驱动器,光驱等) #define DRIVE_FIXED 3 // 固定的驱动器 (如 通常的硬盘) #define DRIVE_REMOTE 4 // 网络驱动器 #define DRIVE_CDROM 5 // CD-ROM #define DRIVE_RAMDISK 6 // 随机存取(RAM) 磁盘 |
//////////////////////// LeftView.h : interface of the CLeftView class #if !defined(AFX_LEFTVIEW_H__29F66875_4E46_11D6_9693_B383368EF622__INCLUDED_) #define AFX_LEFTVIEW_H__29F66875_4E46_11D6_9693_B383368EF622__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CDriveExplorerDoc; class CLeftView : public CTreeView { protected: // create from serialization only CLeftView(); DECLARE_DYNCREATE(CLeftView) // Attributes public: CDriveExplorerDoc* GetDocument(); CImageList* m_pImageList; CString m_LocalPath; // Operations public: BOOL HasSubdirectory(CString &strPathName); BOOL IsDriveNode(HTREEITEM hItem); void SetButtonState(HTREEITEM hItem, CString &strPathName); UINT AddDirectoryNodes(HTREEITEM hItem, CString &strPathName); BOOL IsMediaValid(CString &strPathName); HTREEITEM GetDriveNode(HTREEITEM hItem); UINT DeleteChildren(HTREEITEM hItem); BOOL IsPathValid(CString &strPathName); CString GetPathFromItem(HTREEITEM hItem); void AddDummyNode(HTREEITEM hItem); void InitTreeView(HTREEITEM hParent); BOOL AddDrives(CString strDrive, HTREEITEM hParent); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CLeftView) public: virtual void OnDraw(CDC* pDC); // overridden to draw this view virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnInitialUpdate(); // called first time after construct //}}AFX_VIRTUAL // Implementation public: virtual ~CLeftView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generated message map functions protected: //{{AFX_MSG(CLeftView) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! afx_msg void OnDestroy(); afx_msg void OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #ifndef _DEBUG // debug version in LeftView.cpp inline CDriveExplorerDoc* CLeftView::GetDocument() { return (CDriveExplorerDoc*)m_pDocument; } #endif #endif ////////////////////////////////////////////////////////// CLeftView #include "stdafx.h" #include "DriveExplorer.h" #include "DriveExplorerDoc.h" #include "LeftView.h" #include "DriveExplorerView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define ILI_CDDRV 0 #define ILI_CLSDFLD 1 #define ILI_DRIVE 2 #define ILI_FLOPPYDRV 3 #define ILI_MYCOMP 4 #define ILI_OPENFLD 5 #define ILI_TEXTFILE 6 #define MYCOMPUTER "My Computer" IMPLEMENT_DYNCREATE(CLeftView, CTreeView) BEGIN_MESSAGE_MAP(CLeftView, CTreeView) //{{AFX_MSG_MAP(CLeftView) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! ON_WM_DESTROY() ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding) ON_NOTIFY_REFLECT(TVN_SELCHANGING, OnSelchanging) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////// CLeftView construction/destruction CLeftView::CLeftView() { // TODO: add construction code here } CLeftView::~CLeftView() { } BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cs cs.style |= TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES; return CTreeView::PreCreateWindow(cs); } void CLeftView::OnDraw(CDC* pDC) { CDriveExplorerDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } BOOL CLeftView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); m_pImageList = new CImageList(); CWinApp* pApp = AfxGetApp(); // ASSERT(m_pImageList != NULL); // serious allocation failure checking 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); HTREEITEM hParent = GetTreeCtrl().InsertItem(MYCOMPUTER,ILI_MYCOMP, ILI_MYCOMP); InitTreeView(hParent); GetTreeCtrl().Expand(hParent, TVE_EXPAND); } #ifdef _DEBUG void CLeftView::AssertValid() const { CTreeView::AssertValid(); } void CLeftView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); } CDriveExplorerDoc* CLeftView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDriveExplorerDoc))); return (CDriveExplorerDoc*)m_pDocument; } #endif //_DEBUG void CLeftView::InitTreeView(HTREEITEM hParent) { int nPos = 0; UINT nCount = 0; CString strDrive = "?:\\"; DWORD dwDriveList = ::GetLogicalDrives (); CString cTmp; while (dwDriveList) { if (dwDriveList & 1) { cTmp = strDrive; strDrive.SetAt (0, 0x41 + nPos); if (AddDrives(strDrive , hParent)) nCount++; } dwDriveList >>= 1; nPos++; } return; } BOOL CLeftView::AddDrives(CString strDrive, HTREEITEM hParent) { HTREEITEM hItem; UINT nType = ::GetDriveType ((LPCTSTR) strDrive); UINT nDrive = (UINT) strDrive[0] - 0x41; switch (nType) { case DRIVE_REMOVABLE: hItem = GetTreeCtrl().InsertItem(strDrive, ILI_FLOPPYDRV, ILI_FLOPPYDRV, hParent); AddDummyNode(hItem); break; case DRIVE_FIXED: hItem = GetTreeCtrl().InsertItem(strDrive, ILI_DRIVE, ILI_DRIVE, hParent); AddDummyNode(hItem); break; case DRIVE_REMOTE: hItem = GetTreeCtrl().InsertItem(strDrive, ILI_DRIVE, ILI_DRIVE, hParent); AddDummyNode(hItem); break; case DRIVE_CDROM: hItem = GetTreeCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent); AddDummyNode(hItem); break; case DRIVE_RAMDISK: hItem = GetTreeCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent); AddDummyNode(hItem); break; default: return FALSE; } return true; } void CLeftView::OnDestroy() { CTreeView::OnDestroy(); // TODO: Add your message handler code here if(m_pImageList != NULL) m_pImageList = NULL; delete m_pImageList; } void CLeftView::AddDummyNode(HTREEITEM hItem) { GetTreeCtrl().InsertItem ("", 0, 0, hItem); } CString CLeftView::GetPathFromItem(HTREEITEM hItem) { CString strPathName; while (hItem != NULL) { CString string = GetTreeCtrl().GetItemText (hItem); if ((string.Right (1) != "\\") && !strPathName.IsEmpty ()) string += "\\"; strPathName = string + strPathName; hItem = GetTreeCtrl().GetParentItem (hItem); } if(strPathName.Left(11) == MYCOMPUTER && strPathName.GetLength() > 11) strPathName = strPathName.Mid(12); return strPathName; } BOOL CLeftView::IsPathValid(CString &strPathName) { if (strPathName.GetLength () == 3) return TRUE; HANDLE hFind; WIN32_FIND_DATA fd; BOOL bResult = FALSE; if ((hFind = ::FindFirstFile ((LPCTSTR) strPathName, &fd)) != INVALID_HANDLE_VALUE) { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) bResult = TRUE; ::CloseHandle (hFind); } return bResult; } BOOL CLeftView::IsMediaValid(CString &strPathName) { // Return TRUE if the drive doesn’t support removable media. UINT nDriveType = GetDriveType ((LPCTSTR) strPathName); if ((nDriveType != DRIVE_REMOVABLE) && (nDriveType != DRIVE_CDROM)) return TRUE; } HTREEITEM CLeftView::GetDriveNode(HTREEITEM hItem) { HTREEITEM hParent; do { hParent = GetTreeCtrl().GetParentItem (hItem); if (hParent != NULL) hItem = hParent; } while (hParent != NULL); return hItem; } UINT CLeftView::DeleteChildren(HTREEITEM hItem) { UINT nCount = 0; HTREEITEM hChild = GetTreeCtrl().GetChildItem (hItem); while (hChild != NULL) { HTREEITEM hNextItem = GetTreeCtrl().GetNextSiblingItem (hChild); GetTreeCtrl().DeleteItem (hChild); hChild = hNextItem; nCount++; } return nCount; } UINT CLeftView::AddDirectoryNodes(HTREEITEM hItem, CString &strPathName) { HANDLE hFind; WIN32_FIND_DATA fd; UINT nCount = 0; CString strFileSpec = strPathName; if (strFileSpec.Right (1) != "\\") strFileSpec += "\\"; strFileSpec += "*.*"; if ((hFind = ::FindFirstFile ((LPCTSTR) strFileSpec, &fd)) ==INVALID_HANDLE_VALUE) { if (IsDriveNode (hItem)) AddDummyNode (hItem); return 0; } CWaitCursor wait; CDriveExplorerDoc* pDoc = GetDocument(); pDoc->m_ExplorerView->DeleteAllItems(); do { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { CString strFileName = (LPCTSTR) &fd.cFileName; if ((strFileName != ".") && (strFileName != "..") && (fd.dwFileAttributes != 22)) { HTREEITEM hChild =GetTreeCtrl().InsertItem ((LPCTSTR) &fd.cFileName, ILI_CLSDFLD , ILI_OPENFLD , hItem , TVI_SORT); CString strNewPathName = strPathName; if (strNewPathName.Right (1) != "\\") strNewPathName += "\\"; strNewPathName += (LPCTSTR) &fd.cFileName; SetButtonState (hChild, strNewPathName); nCount++; } } else { pDoc->m_ExplorerView->AddToListView(&fd); } } while (::FindNextFile (hFind, &fd)); ::FindClose (hFind); return nCount; } void CLeftView::SetButtonState(HTREEITEM hItem, CString &strPathName) { if (HasSubdirectory (strPathName)) AddDummyNode (hItem); } BOOL CLeftView::HasSubdirectory(CString &strPathName) { HANDLE hFind; WIN32_FIND_DATA fd; BOOL bResult = FALSE; CString strFileSpec = strPathName; if (strFileSpec.Right (1) != "\\") strFileSpec += "\\"; strFileSpec += "*.*"; if ((hFind = ::FindFirstFile ((LPCTSTR) strFileSpec, &fd)) !=INVALID_HANDLE_VALUE) { do { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { CString strFileName = (LPCTSTR) &fd.cFileName; if ((strFileName != ".") && (strFileName != "..")) bResult = TRUE; } } while (::FindNextFile (hFind, &fd) && !bResult); ::FindClose (hFind); } return bResult; } BOOL CLeftView::IsDriveNode(HTREEITEM hItem) { return (GetTreeCtrl().GetParentItem (hItem) == NULL) ? TRUE : FALSE; } void CLeftView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; HTREEITEM hItem = pNMTreeView->itemNew.hItem; CString strPathName = GetPathFromItem (hItem); if (!IsMediaValid (strPathName)) { HTREEITEM hRoot = GetDriveNode (hItem); GetTreeCtrl().Expand (hRoot, TVE_COLLAPSE); DeleteChildren (hRoot); AddDummyNode (hRoot); *pResult = TRUE; return; } // Delete the item if strPathName no longer specifies a valid path. if (!IsPathValid (strPathName)) { if(strPathName != MYCOMPUTER && strPathName != "") { GetTreeCtrl().DeleteItem (hItem); *pResult = TRUE; return; } } CWaitCursor wait; if (pNMTreeView->action == TVE_EXPAND) { if(strPathName != MYCOMPUTER) { DeleteChildren (hItem); if (!AddDirectoryNodes (hItem, strPathName)) *pResult = TRUE; } } else { if(strPathName != MYCOMPUTER) { DeleteChildren (hItem); if (IsDriveNode (hItem)) AddDummyNode (hItem); else SetButtonState (hItem, strPathName); } } m_LocalPath = strPathName; *pResult = 0; } void CLeftView::OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here HTREEITEM hItem = pNMTreeView->itemNew.hItem; CString strPathName = GetPathFromItem (hItem); *pResult = FALSE; if(strPathName == MYCOMPUTER) return; CWaitCursor wait; if (!AddDirectoryNodes (hItem, strPathName)) *pResult = TRUE; m_LocalPath = strPathName; *pResult = 0; } ////////////////// DriveExplorerView.h : interface of the CDriveExplorerView class #if !defined(AFX_DRIVEEXPLORERVIEW_H__29F66873_4E46_11D6_9693_B383368EF622__INCLUDED_) #define AFX_DRIVEEXPLORERVIEW_H__29F66873_4E46_11D6_9693_B383368EF622__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CDriveExplorerView : public CListView { protected: // create from serialization only CDriveExplorerView(); DECLARE_DYNCREATE(CDriveExplorerView) // Attributes public: CDriveExplorerDoc* GetDocument(); CImageList* m_pImageList; CImageList* m_pImageListL; // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDriveExplorerView) public: virtual void OnDraw(CDC* pDC); // overridden to draw this view virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual void OnInitialUpdate(); // called first time after construct virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); //}}AFX_VIRTUAL // Implementation public: void SetupImages(CImageList* mImageList, int iSize); UINT GetListViewIcon(CString s); CString GetFileType(CString s); LPTSTR GetNTS(CString cString); void AddToListView(WIN32_FIND_DATA* fd); void DeleteAllItems(); virtual ~CDriveExplorerView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generated message map functions protected: //{{AFX_MSG(CDriveExplorerView) afx_msg void OnDestroy(); afx_msg void OnSize(UINT nType, int cx, int cy); //}}AFX_MSG afx_msg void OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct); DECLARE_MESSAGE_MAP() }; #ifndef _DEBUG // debug version in DriveExplorerView.cpp inline CDriveExplorerDoc* CDriveExplorerView::GetDocument() { return (CDriveExplorerDoc*)m_pDocument; } #endif #endif ///////////////////// DriveExplorerView.cpp : implementation of the CDriveExplorerView class #include "stdafx.h" #include "DriveExplorer.h" #include "DriveExplorerDoc.h" #include "DriveExplorerView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define ICI_ACCESSFILE 0 #define ICI_C_SOURCE 1 #define ICI_CDDRV 2 #define ICI_CLSDFLD 3 #define ICI_CURSORFILE 4 #define ICI_DRIVE 5 #define ICI_DRIVERSFILE 6 #define ICI_ERROR 7 #define ICI_EXCELFILE 8 #define ICI_EXCLAMATION 9 #define ICI_EXEFILE 10 #define ICI_FLOPPYDRV 11 #define ICI_FONTFILE 12 #define ICI_FOXPROFILE 13 #define ICI_GENERALFILE 14 #define ICI_HEADERFILE 15 #define ICI_HELPFILE 16 #define ICI_HTMLDOC 17 #define ICI_HTMLHELP 18 #define ICI_IMAGEFILE 19 #define ICI_INFO 20 #define ICI_JAVABEAN 21 #define ICI_JAVACLASSES 22 #define ICI_JAVASOURCE 23 #define ICI_MYCOMPUTER 24 #define ICI_OPENFLD 25 #define ICI_PDFFILE 26 #define ICI_QUESTION 27 #define ICI_REGISTRYFILE 28 #define ICI_SETUPFILE 29 #define ICI_SOUNDFILE 30 #define ICI_TEXTFILE 31 #define ICI_TRASHFILE 32 #define ICI_UNINSTALLFILE 33 #define ICI_VIDEOFILE 34 #define ICI_WINDOWSFILE 35 #define ICI_WORDDOC 36 #define ICI_ZIPFILE 37 #define ICI_CDUP 38 ///////////////////////////////////////////////////////////// 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: add construction code here } CDriveExplorerView::~CDriveExplorerView() { } BOOL CDriveExplorerView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style |= LVS_REPORT; return CListView::PreCreateWindow(cs); } void CDriveExplorerView::OnDraw(CDC* pDC) { CDriveExplorerDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CListCtrl& refCtrl = GetListCtrl(); refCtrl.InsertItem(0, "Item!"); // TODO: add draw code for native data here } void CDriveExplorerView::OnInitialUpdate() { CListView::OnInitialUpdate(); CDriveExplorerDoc* pDoc = GetDocument(); pDoc->m_ExplorerView = this; CRect rect; GetClientRect(&rect); GetListCtrl().InsertColumn(0, "File Name", 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 = new CImageList(); m_pImageListL = new CImageList(); SetupImages(m_pImageList, 16); SetupImages(m_pImageListL, 32); GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL); GetListCtrl().SetImageList(m_pImageListL, LVSIL_NORMAL); } #ifdef _DEBUG void CDriveExplorerView::AssertValid() const { CListView::AssertValid(); } void CDriveExplorerView::Dump(CDumpContext& dc) const { CListView::Dump(dc); } CDriveExplorerDoc* CDriveExplorerView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDriveExplorerDoc))); return (CDriveExplorerDoc*)m_pDocument; } #endif //_DEBUG void CDriveExplorerView::OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct) { //TODO: add code to react to the user changing the view style of your window } void CDriveExplorerView::DeleteAllItems() { GetListCtrl().DeleteAllItems(); } void CDriveExplorerView::AddToListView(WIN32_FIND_DATA *fd) { LV_ITEM lvitem; char sNumBuff[100]; int iActualItem; CString sText; 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); // Add Attribute column lvitem.mask = LVIF_TEXT; lvitem.iItem = iActualItem; lvitem.iSubItem = 1; lvitem.pszText = GetNTS(GetFileType(fd->cFileName)); GetListCtrl().SetItem(&lvitem); // Add Size column if(fd->nFileSizeLow != 0) ltoa((long)fd->nFileSizeLow,sNumBuff,10); else strcpy(sNumBuff,""); lvitem.mask = LVIF_TEXT; lvitem.iItem = iActualItem; lvitem.iSubItem = 2; lvitem.pszText = sNumBuff; GetListCtrl().SetItem(&lvitem); // Add Time column CTime refTime; 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); } LPTSTR CDriveExplorerView::GetNTS(CString cString) { LPTSTR lpsz = new TCHAR[cString.GetLength()+1]; _tcscpy(lpsz, cString); return lpsz; } CString CDriveExplorerView::GetFileType(CString s) { CString cResult; int nFoundAt = s.Find("." , 0); s.MakeUpper(); if(nFoundAt == 0) return s + " File"; CString ext = s.Mid(nFoundAt); if(ext == ".PDF") return "PDF File"; if(ext == ".CPP") return "VC Source"; if(ext == ".H") return "Header File"; if(ext == ".C") return "C Source"; else if(s == "SETUP.EXE") return "SETUP File"; else if(s == "ISUNINST.EXE") return "UNINSTALL File"; else if(ext == ".TXT" || ext == ".LOG") return "TEXT File"; else if(ext == ".ZIP" || ext == ".ARJ" || ext == ".TGZ" || ext == ".RAR" || ext == ".TAR" || ext == ".LZH" || ext == ".LZA" || ext == ".CAB") return "ZIP File"; else if(ext == ".EXE" || ext == ".COM" || ext == ".BAT") return "Application"; else if(ext == ".AU" || ext == ".WAV" || ext == ".MP3") return "SOUND File"; else if(ext == ".HTM" || ext == ".HTML") return "HTML Document"; else if(ext == ".DOC") return "WORD Document"; else if(ext == ".MPG" || ext == ".MPEG" || ext == ".AVI") return ICI_VIDEOFILE; else if(ext == ".HLP") return "HELP File"; else if(ext == ".BMP") return "Bitmap File"; else if(ext == ".ICO") return "Icon File"; else if(ext == ".DBF" || ext == ".DBT" || ext == ".MEM") return "FOXPRO File"; else if(ext == ".DLL" || ext == ".SYS" || ext == ".OCX" || ext == ".VXD" || ext == ".INI" || ext == ".DRV") return "DRIVERS File"; else if(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") return "Picture File"; else if(ext == ".TSK" || ext == ".CPX" || ext == ".ROM" || ext == ".CFG" || ext == ".STF" || ext == ".LST" ||ext == ".INF") return "WINDOWS File"; else if(ext == ".CUR" || ext == ".ANI") return "CURSOR File"; else if(ext == ".FON") return "FONT File"; else if(ext == ".BAK") return "Backup File"; else if(ext == ".JAVA") return "JAVA Source"; else if(ext == ".CLASS") return "JAVA Class"; else if(ext == ".BEAN") return "JAVA Bean"; else if(ext == ".REG") return "REGISTRY File"; else if(ext == ".MDB") return "ACCESS Database"; else if(ext == ".XLS") return "EXCEL File"; else if(ext == ".CHM") return "HTML Help"; else { ext = ext.Mid( (ext.Find(’.’,0) != -1 ? 1 : 0)); return ext + " File"; } return cResult; } UINT CDriveExplorerView::GetListViewIcon(CString s) { int nFoundAt = s.Find("." , 1); s.MakeUpper(); if(nFoundAt == 0) return ICI_GENERALFILE; CString ext = s.Mid(nFoundAt); // Set some standard icon types if(ext == ".PDF") return ICI_PDFFILE; else if(s == "SETUP.EXE") return ICI_SETUPFILE; else if(s == "ISUNINST.EXE") return ICI_UNINSTALLFILE; else if(ext == ".TXT" || ext == ".LOG") return ICI_TEXTFILE; else if(ext == ".ZIP" || ext == ".ARJ" || ext == ".TGZ" || ext == ".RAR" || ext == ".TAR" || ext == ".LZH" || ext == ".LZA" || ext == ".CAB") return ICI_ZIPFILE; else if(ext == ".EXE" || ext == ".COM" || ext == ".BAT") return ICI_EXEFILE; else if(ext == ".AU" || ext == ".WAV" || ext == ".MP3") return ICI_SOUNDFILE; else if(ext == ".HTM" || ext == ".HTML") return ICI_HTMLDOC; else if(ext == ".DOC") return ICI_WORDDOC; else if(ext == ".MPG" || ext == ".MPEG" || ext == ".AVI") return ICI_VIDEOFILE; else if(ext == ".HLP") return ICI_HELPFILE; else if(ext == ".BMP") return ICI_IMAGEFILE; else if(ext == ".ICO") return ICI_IMAGEFILE; else if(ext == ".DBF" || ext == ".DBT" || ext == ".MEM") return ICI_FOXPROFILE; else if(ext == ".DLL" || ext == ".SYS" || ext == ".OCX" || ext == ".VXD" || ext == ".INI" || ext == ".DRV") return ICI_DRIVERSFILE; else if(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") return ICI_IMAGEFILE; else if(ext == ".TSK" || ext == ".CPX" || ext == ".ROM" || ext == ".CFG" || ext == ".STF" || ext == ".LST" ||ext == ".INF") return ICI_WINDOWSFILE; else if(ext == ".CUR" || ext == ".ANI") return ICI_CURSORFILE; else if(ext == ".FON") return ICI_FONTFILE; else if(ext == ".BAK") return ICI_TRASHFILE; else if(ext == ".JAVA") return ICI_JAVASOURCE; else if(ext == ".CLASS") return ICI_JAVACLASSES; else if(ext == ".BEAN") return ICI_JAVABEAN; else if(ext == ".REG") return ICI_REGISTRYFILE; else if(ext == ".MDB") return ICI_ACCESSFILE; else if(ext == ".XLS") return ICI_EXCELFILE; else if(ext == ".CHM") return ICI_HTMLHELP; else return ICI_GENERALFILE; } void CDriveExplorerView::SetupImages(CImageList* mImageList, int iSize) { CWinApp* pApp = AfxGetApp(); // ASSERT(m_pImageList != NULL); // serious allocation failure checking 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)); return ; } void CDriveExplorerView::OnDestroy() { CListView::OnDestroy(); // TODO: Add your message handler code here if(m_pImageList != NULL) m_pImageList = NULL; if(m_pImageListL != NULL) m_pImageListL = NULL; delete m_pImageList; delete m_pImageListL; } void CDriveExplorerView::OnSize(UINT nType, int cx, int cy) { CListView::OnSize(nType, cx, cy); // TODO: Add your message handler code here if(GetListCtrl().GetSafeHwnd()) { GetListCtrl().SetColumnWidth(0, cx / 2); GetListCtrl().SetColumnWidth(1, cx / 4); GetListCtrl().SetColumnWidth(2, cx / 4); } } /////////////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) { // create splitter window if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE; if (!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(); return FALSE; } m_wndSplitter.SetColumnInfo(0, 200, 100); return TRUE; } CDriveExplorerView* CMainFrame::GetRightPane() { CDriveExplorerView* pView=(CDriveExplorerView*)m_wndSplitter.GetPane(0, 1); return pView; } void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI) { CDriveExplorerView* pView = GetRightPane(); if (pView == NULL) pCmdUI->Enable(FALSE); else { DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK; if (pCmdUI->m_nID == ID_VIEW_LINEUP) { if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON) pCmdUI->Enable(); else pCmdUI->Enable(FALSE); } else { // otherwise, use dots to reflect the style of the view pCmdUI->Enable(); BOOL bChecked = FALSE; switch (pCmdUI->m_nID) { case ID_VIEW_AS_DETAILS: bChecked = (dwStyle == LVS_REPORT); break; case ID_VIEW_AS_SMALLICONS: bChecked = (dwStyle == LVS_SMALLICON); break; case ID_VIEW_AS_LARGEICONS: bChecked = (dwStyle == LVS_ICON); break; case ID_VIEW_AS_LIST: bChecked = (dwStyle == LVS_LIST); break; default: bChecked = FALSE; break; } pCmdUI->SetRadio(bChecked ? 1 : 0); } } } void CMainFrame::OnViewStyle(UINT nCommandID) { CDriveExplorerView* pView = GetRightPane(); if (pView != NULL) { DWORD dwStyle = -1; switch (nCommandID) { case ID_VIEW_LINEUP: { // ask the list control to snap to grid CListCtrl& refListCtrl = pView->GetListCtrl(); refListCtrl.Arrange(LVA_SNAPTOGRID); } break; // other commands change the style on the list control case ID_VIEW_AS_DETAILS: dwStyle = LVS_REPORT; break; case ID_VIEW_AS_SMALLICONS: dwStyle = LVS_SMALLICON; break; case ID_VIEW_AS_LARGEICONS: dwStyle = LVS_ICON; break; case ID_VIEW_AS_LIST: dwStyle = LVS_LIST; break; } // change the style; window will repaint automatically if (dwStyle != -1) pView->ModifyStyle(LVS_TYPEMASK, dwStyle); } } |
联系客服