explorerView.cpp
上传用户:jorden
上传日期:2022-08-09
资源大小:83k
文件大小:14k
源码类别:

TreeView控件

开发平台:

Visual C++

  1. // explorerView.cpp : implementation of the CExplorerView class
  2. //
  3. #include "stdafx.h"
  4. #include "explorer.h"
  5. #include "explorerDoc.h"
  6. #include "explorerView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. ////////////////////////////////////////////////////////////////////////////
  13. // define my own data 
  14.     #define ICI_ACCESSFILE    0
  15. #define ICI_C_SOURCE      1
  16. #define ICI_CDDRV         2
  17. #define ICI_CLSDFLD       3
  18. #define ICI_CURSORFILE    4
  19. #define ICI_DRIVE         5
  20. #define ICI_DRIVERSFILE   6
  21. #define ICI_ERROR         7
  22. #define ICI_EXCELFILE     8
  23. #define ICI_EXCLAMATION   9
  24. #define ICI_EXEFILE       10
  25. #define ICI_FLOPPYDRV     11
  26. #define ICI_FONTFILE      12
  27. #define ICI_FOXPROFILE    13
  28. #define ICI_GENERALFILE   14
  29. #define ICI_HEADERFILE    15
  30. #define ICI_HELPFILE      16
  31. #define ICI_HTMLDOC       17
  32. #define ICI_HTMLHELP      18
  33. #define ICI_IMAGEFILE     19
  34. #define ICI_INFO          20
  35. #define ICI_JAVABEAN      21
  36. #define ICI_JAVACLASSES   22
  37. #define ICI_JAVASOURCE    23
  38. #define ICI_MYCOMPUTER    24
  39. #define ICI_OPENFLD       25
  40. #define ICI_PDFFILE       26
  41. #define ICI_QUESTION      27
  42. #define ICI_REGISTRYFILE  28
  43. #define ICI_SETUPFILE     29
  44. #define ICI_SOUNDFILE     30
  45. #define ICI_TEXTFILE      31
  46. #define ICI_TRASHFILE     32
  47. #define ICI_UNINSTALLFILE 33
  48. #define ICI_VIDEOFILE     34
  49. #define ICI_WINDOWSFILE   35
  50. #define ICI_WORDDOC       36
  51. #define ICI_ZIPFILE       37
  52. #define ICI_CDUP          38
  53. // define my own data 
  54. /////////////////////////////////////////////////////////////////////////////
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CExplorerView
  57. IMPLEMENT_DYNCREATE(CExplorerView, CListView)
  58. BEGIN_MESSAGE_MAP(CExplorerView, CListView)
  59. //{{AFX_MSG_MAP(CExplorerView)
  60. ON_WM_DESTROY()
  61. ON_WM_SIZE()
  62. //}}AFX_MSG_MAP
  63. END_MESSAGE_MAP()
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CExplorerView construction/destruction
  66. CExplorerView::CExplorerView()
  67. {
  68. // TODO: add construction code here
  69. }
  70. CExplorerView::~CExplorerView()
  71. {
  72. }
  73. BOOL CExplorerView::PreCreateWindow(CREATESTRUCT& cs)
  74. {
  75. // TODO: Modify the Window class or styles here by modifying
  76. //  the CREATESTRUCT cs
  77. cs.style |= LVS_REPORT;
  78. return CListView::PreCreateWindow(cs);
  79. }
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CExplorerView drawing
  82. void CExplorerView::OnDraw(CDC* pDC)
  83. {
  84. CExplorerDoc* pDoc = GetDocument();
  85. ASSERT_VALID(pDoc);
  86. CListCtrl& refCtrl = GetListCtrl();
  87. refCtrl.InsertItem(0, "Item!");
  88. // TODO: add draw code for native data here
  89. }
  90. void CExplorerView::OnInitialUpdate()
  91. {
  92. CListView::OnInitialUpdate();
  93. CExplorerDoc *pDoc = GetDocument();
  94. pDoc->m_ExplorerView = this;
  95. CRect rect;
  96. GetClientRect(&rect);
  97. GetListCtrl().InsertColumn(0, "File Name", LVCFMT_LEFT , rect.right / 2 , -1);
  98. GetListCtrl().InsertColumn(1, "Size", LVCFMT_LEFT , rect.right / 4 , -1);
  99. GetListCtrl().InsertColumn(2, "Date", LVCFMT_LEFT , rect.right / 4 , -1);
  100. m_pImageList = new CImageList();
  101. m_pImageListL = new CImageList();
  102. SetupImages(m_pImageList, 16);
  103. SetupImages(m_pImageListL, 32);
  104. GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);
  105. GetListCtrl().SetImageList(m_pImageListL, LVSIL_NORMAL);
  106. // TODO: You may populate your ListView with items by directly accessing
  107. //  its list control through a call to GetListCtrl().
  108. }
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CDriveExplorerView printing
  111. BOOL CExplorerView::OnPreparePrinting(CPrintInfo* pInfo)
  112. {
  113. // default preparation
  114. return DoPreparePrinting(pInfo);
  115. }
  116. void CExplorerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  117. {
  118. // TODO: add extra initialization before printing
  119. }
  120. void CExplorerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  121. {
  122. // TODO: add cleanup after printing
  123. }
  124. /////////////////////////////////////////////////////////////////////////////
  125. // CExplorerView diagnostics
  126. #ifdef _DEBUG
  127. void CExplorerView::AssertValid() const
  128. {
  129. CListView::AssertValid();
  130. }
  131. void CExplorerView::Dump(CDumpContext& dc) const
  132. {
  133. CListView::Dump(dc);
  134. }
  135. CExplorerDoc* CExplorerView::GetDocument() // non-debug version is inline
  136. {
  137. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CExplorerDoc)));
  138. return (CExplorerDoc*)m_pDocument;
  139. }
  140. #endif //_DEBUG
  141. /////////////////////////////////////////////////////////////////////////////
  142. // CExplorerView message handlers
  143. void CExplorerView::OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct)
  144. {
  145. //TODO: add code to react to the user changing the view style of your window
  146. }
  147. void CExplorerView::DeleteAllItems()
  148. {
  149. GetListCtrl().DeleteAllItems();
  150. }
  151. void CExplorerView::AddToListView(WIN32_FIND_DATA *fd)
  152. {
  153. LV_ITEM lvitem;
  154. char sNumBuff[100];
  155. int iActualItem;
  156. CString sText;
  157. lvitem.mask = LVIF_TEXT | LVIF_IMAGE;
  158. lvitem.iItem = 0;
  159. lvitem.iSubItem = 0;
  160. lvitem.pszText =  GetNTS(fd->cFileName); //  fd.cFileName;
  161. lvitem.iImage = GetListViewIcon(fd->cFileName); //SetFileIcon(fd->GetFileName());
  162. iActualItem = GetListCtrl().InsertItem(&lvitem);
  163. // Add Attribute column
  164. lvitem.mask = LVIF_TEXT;
  165. lvitem.iItem = iActualItem;
  166. lvitem.iSubItem = 1;
  167. lvitem.pszText = GetNTS(GetFileType(fd->cFileName));
  168. GetListCtrl().SetItem(&lvitem);
  169. // Add Size column
  170. if(fd->nFileSizeLow != 0)
  171. ltoa((long)fd->nFileSizeLow,sNumBuff,10);
  172. else
  173. strcpy(sNumBuff,"");
  174. lvitem.mask = LVIF_TEXT;
  175. lvitem.iItem = iActualItem;
  176. lvitem.iSubItem = 2;
  177. lvitem.pszText = sNumBuff;
  178. GetListCtrl().SetItem(&lvitem);
  179. // Add Time column
  180. CTime refTime;
  181. refTime = fd->ftCreationTime;
  182. sText = refTime.Format( "%b-%d-%Y" );
  183. lvitem.mask = LVIF_TEXT;
  184. lvitem.iItem = iActualItem;
  185. lvitem.iSubItem = 3;
  186. lvitem.pszText = sText.GetBuffer(sText.GetLength());
  187. GetListCtrl().SetItem(&lvitem);
  188. }
  189. LPTSTR CExplorerView::GetNTS(CString cString)
  190. {
  191.   LPTSTR lpsz = new TCHAR[cString.GetLength()+1];
  192.   _tcscpy(lpsz, cString);
  193.   return lpsz;
  194. }
  195. CString CExplorerView::GetFileType(CString s)
  196. {
  197. CString cResult;
  198. int nFoundAt = s.Find("." , 0);
  199. s.MakeUpper();
  200. if(nFoundAt == 0)
  201. return s + " File";
  202. CString ext = s.Mid(nFoundAt);
  203.     if(ext == ".PDF")  return "PDF File";
  204. if(ext == ".CPP") return "VC Source";
  205. if(ext == ".H") return "Header File";
  206. if(ext == ".C") return "C Source";
  207. else if(s == "SETUP.EXE") return "SETUP File";
  208. else if(s == "ISUNINST.EXE") return "UNINSTALL File";
  209. else if(ext == ".TXT" || ext == ".LOG") return "TEXT File";
  210. else if(ext == ".ZIP" || ext == ".ARJ" || ext == ".TGZ" || 
  211. ext == ".RAR" || ext == ".TAR" || ext == ".LZH" ||
  212. ext == ".LZA" || ext == ".CAB")
  213. return "ZIP File";
  214. else if(ext == ".EXE" || ext == ".COM" || ext == ".BAT")
  215. return "Application";
  216. else if(ext == ".AU"   || ext == ".WAV"  || ext == ".MP3")
  217. return "SOUND File";
  218. else if(ext == ".HTM" || ext == ".HTML") return "HTML Document";
  219. else if(ext == ".DOC")  return "WORD Document";
  220. else if(ext == ".MPG" || ext == ".MPEG" || ext == ".AVI")
  221. return ICI_VIDEOFILE;
  222. else if(ext == ".HLP") return "HELP File";
  223. else if(ext == ".BMP") return "Bitmap File";
  224. else if(ext == ".ICO") return "Icon File";
  225. else if(ext == ".DBF" || ext == ".DBT" || ext == ".MEM")
  226. return "FOXPRO File";
  227. else if(ext == ".DLL" || ext == ".SYS" || ext == ".OCX"  ||
  228. ext == ".VXD" || ext == ".INI" ||
  229. ext == ".DRV")
  230. return "DRIVERS File";
  231. else if(ext == ".JPG"  || ext == ".GIF" || ext == ".JPEG" || 
  232.     ext == ".AIS"  || ext == ".EMF" || ext == ".IFF"  ||
  233. ext == ".KDC"  || ext == ".PCD" || ext == ".PCX"  ||
  234. ext == ".PIC"  || ext == ".PIX" || ext == ".PNG"  ||
  235. ext == ".PSD"  || ext == ".SGI" || ext == ".TIF"  ||
  236. ext == ".TIFF" || ext == ".WMF")
  237. return "Picture File";
  238. else if(ext == ".TSK" || ext == ".CPX" || ext == ".ROM" ||
  239.     ext == ".CFG" || ext == ".STF" || ext == ".LST" ||
  240. ext == ".INF")
  241. return "WINDOWS File";
  242. else if(ext == ".CUR" || ext == ".ANI") return "CURSOR File";
  243. else if(ext == ".FON") return "FONT File";
  244. else if(ext == ".BAK") return "Backup File";
  245. else if(ext == ".JAVA") return "JAVA Source";
  246. else if(ext == ".CLASS") return "JAVA Class";
  247. else if(ext == ".BEAN") return "JAVA Bean";
  248. else if(ext == ".REG") return "REGISTRY File";
  249. else if(ext == ".MDB") return "ACCESS Database";
  250. else if(ext == ".XLS") return "EXCEL File";
  251. else if(ext == ".CHM") return "HTML Help";
  252. else
  253. {
  254. ext = ext.Mid( (ext.Find('.',0) != -1 ? 1 : 0));
  255. return ext + " File";
  256. }
  257. return cResult;
  258. }
  259. UINT CExplorerView::GetListViewIcon(CString s)
  260. {
  261. int nFoundAt = s.Find("." , 1);
  262. s.MakeUpper();
  263. if(nFoundAt == 0)
  264. return ICI_GENERALFILE;
  265. CString ext = s.Mid(nFoundAt);
  266. // Set some standard icon types
  267.     if(ext == ".PDF")  return ICI_PDFFILE;
  268. else if(s == "SETUP.EXE") return ICI_SETUPFILE;
  269. else if(s == "ISUNINST.EXE") return ICI_UNINSTALLFILE;
  270. else if(ext == ".TXT" || ext == ".LOG") return ICI_TEXTFILE;
  271. else if(ext == ".ZIP" || ext == ".ARJ" || ext == ".TGZ" || 
  272. ext == ".RAR" || ext == ".TAR" || ext == ".LZH" ||
  273. ext == ".LZA" || ext == ".CAB")
  274. return ICI_ZIPFILE;
  275. else if(ext == ".EXE" || ext == ".COM" || ext == ".BAT")
  276. return ICI_EXEFILE;
  277. else if(ext == ".AU"   || ext == ".WAV"  || ext == ".MP3")
  278. return ICI_SOUNDFILE;
  279. else if(ext == ".HTM" || ext == ".HTML") return ICI_HTMLDOC;
  280. else if(ext == ".DOC")  return ICI_WORDDOC;
  281. else if(ext == ".MPG" || ext == ".MPEG" || ext == ".AVI")
  282. return ICI_VIDEOFILE;
  283. else if(ext == ".HLP") return ICI_HELPFILE;
  284. else if(ext == ".BMP") return ICI_IMAGEFILE;
  285. else if(ext == ".ICO") return ICI_IMAGEFILE;
  286. else if(ext == ".DBF" || ext == ".DBT" || ext == ".MEM")
  287. return ICI_FOXPROFILE;
  288. else if(ext == ".DLL" || ext == ".SYS" || ext == ".OCX"  ||
  289. ext == ".VXD" || ext == ".INI" ||
  290. ext == ".DRV")
  291. return ICI_DRIVERSFILE;
  292. else if(ext == ".JPG"  || ext == ".GIF" || ext == ".JPEG" || 
  293.     ext == ".AIS"  || ext == ".EMF" || ext == ".IFF"  ||
  294. ext == ".KDC"  || ext == ".PCD" || ext == ".PCX"  ||
  295. ext == ".PIC"  || ext == ".PIX" || ext == ".PNG"  ||
  296. ext == ".PSD"  || ext == ".SGI" || ext == ".TIF"  ||
  297. ext == ".TIFF" || ext == ".WMF")
  298. return ICI_IMAGEFILE;
  299. else if(ext == ".TSK" || ext == ".CPX" || ext == ".ROM" ||
  300.     ext == ".CFG" || ext == ".STF" || ext == ".LST" ||
  301. ext == ".INF")
  302. return ICI_WINDOWSFILE;
  303. else if(ext == ".CUR" || ext == ".ANI") return ICI_CURSORFILE;
  304. else if(ext == ".FON") return ICI_FONTFILE;
  305. else if(ext == ".BAK") return ICI_TRASHFILE;
  306. else if(ext == ".JAVA") return ICI_JAVASOURCE;
  307. else if(ext == ".CLASS") return ICI_JAVACLASSES;
  308. else if(ext == ".BEAN") return ICI_JAVABEAN;
  309. else if(ext == ".REG") return ICI_REGISTRYFILE;
  310. else if(ext == ".MDB") return ICI_ACCESSFILE;
  311. else if(ext == ".XLS") return ICI_EXCELFILE;
  312. else if(ext == ".CHM") return ICI_HTMLHELP;
  313. else
  314. return ICI_GENERALFILE;
  315. }
  316. void CExplorerView::SetupImages(CImageList* mImageList, int iSize)
  317. {
  318. CWinApp* pApp = AfxGetApp();
  319. // ASSERT(m_pImageList != NULL);    // serious allocation failure checking
  320. mImageList->Create(iSize, iSize, ILC_COLOR8 | ILC_MASK,  9, 9);
  321. mImageList->Add(pApp->LoadIcon(ICO_ACCESSFILE));
  322. mImageList->Add(pApp->LoadIcon(ICO_C_SOURCE));
  323. mImageList->Add(pApp->LoadIcon(ICO_CDDRV));  
  324. mImageList->Add(pApp->LoadIcon(ICO_CLSDFLD)); 
  325. mImageList->Add(pApp->LoadIcon(ICO_CURSORFILE));
  326. mImageList->Add(pApp->LoadIcon(ICO_DRIVE));  
  327. mImageList->Add(pApp->LoadIcon(ICO_DRIVERSFILE));
  328. mImageList->Add(pApp->LoadIcon(ICO_ERROR));
  329. mImageList->Add(pApp->LoadIcon(ICO_EXCELFILE));
  330. mImageList->Add(pApp->LoadIcon(ICO_EXCLAMATION));
  331. mImageList->Add(pApp->LoadIcon(ICO_EXEFILE));
  332. mImageList->Add(pApp->LoadIcon(ICO_FLOPPYDRV)); 
  333. mImageList->Add(pApp->LoadIcon(ICO_FONTFILE));
  334. mImageList->Add(pApp->LoadIcon(ICO_FOXPROFILE));
  335. mImageList->Add(pApp->LoadIcon(ICO_GENERALFILE));
  336. mImageList->Add(pApp->LoadIcon(ICO_HEADERFILE));
  337. mImageList->Add(pApp->LoadIcon(ICO_HELPFILE));
  338. mImageList->Add(pApp->LoadIcon(ICO_HTMLDOC));
  339. mImageList->Add(pApp->LoadIcon(ICO_HTMLHELP));
  340. mImageList->Add(pApp->LoadIcon(ICO_IMAGEFILE));
  341. mImageList->Add(pApp->LoadIcon(ICO_INFO));
  342. mImageList->Add(pApp->LoadIcon(ICO_JAVABEAN));
  343. mImageList->Add(pApp->LoadIcon(ICO_JAVACLASSES));
  344. mImageList->Add(pApp->LoadIcon(ICO_JAVASOURCE));
  345. mImageList->Add(pApp->LoadIcon(ICO_MYCOMP));
  346. mImageList->Add(pApp->LoadIcon(ICO_OPENFLD)); 
  347. mImageList->Add(pApp->LoadIcon(ICO_PDFFILE));
  348. mImageList->Add(pApp->LoadIcon(ICO_QUESTION));
  349. mImageList->Add(pApp->LoadIcon(ICO_REGISTRYFILE));
  350. mImageList->Add(pApp->LoadIcon(ICO_SETUPFILE));
  351. mImageList->Add(pApp->LoadIcon(ICO_SOUNDFILE));
  352. mImageList->Add(pApp->LoadIcon(ICO_TEXTFILE)); 
  353. mImageList->Add(pApp->LoadIcon(ICO_TRASHFILE));
  354. mImageList->Add(pApp->LoadIcon(ICO_UNINSTALLFILE));
  355. mImageList->Add(pApp->LoadIcon(ICO_VIDEOFILE));
  356. mImageList->Add(pApp->LoadIcon(ICO_WINDOWSFILE));
  357. mImageList->Add(pApp->LoadIcon(ICO_WORDDOC));
  358. mImageList->Add(pApp->LoadIcon(ICO_ZIPFILE));
  359. mImageList->Add(pApp->LoadIcon(ICO_CDUP));
  360. return ;
  361. }
  362. void CExplorerView::OnDestroy()
  363. {
  364. CListView::OnDestroy();
  365. // TODO: Add your message handler code here
  366. if(m_pImageList != NULL)
  367. m_pImageList = NULL;
  368. if(m_pImageListL != NULL)
  369. m_pImageListL = NULL;
  370. delete m_pImageList;
  371. delete m_pImageListL;
  372. }
  373. void CExplorerView::OnSize(UINT nType, int cx, int cy) 
  374. {
  375. CListView::OnSize(nType, cx, cy);
  376. // TODO: Add your message handler code here
  377. if(GetListCtrl().GetSafeHwnd())
  378. {
  379. GetListCtrl().SetColumnWidth(0, cx / 2);
  380. GetListCtrl().SetColumnWidth(1, cx / 4);
  381. GetListCtrl().SetColumnWidth(2, cx / 4);
  382. }
  383. }