DirListCtrl.cpp
上传用户:tjfeida
上传日期:2013-03-10
资源大小:1917k
文件大小:18k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // DirListCtrl.cpp : implementation file
  2. //
  3. /*********************************************
  4. **该文件是属于WolfFTP工程中的。如果有什么问题
  5. **请联系
  6. **         tablejiang@21cn.com
  7. **或者访问
  8. **         http://wolfftp.51.net
  9. **以得到最新的支持。
  10. *********************************************/
  11. #include "stdafx.h"
  12. #include "DirListCtrl.h"
  13. #include "SortStringArray.h"
  14. #include "shlwapi.h"
  15. #include "InputFileNameDlg.h"
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CDirListCtrl
  23. CDirListCtrl::CDirListCtrl()
  24. {
  25. }
  26. CDirListCtrl::~CDirListCtrl()
  27. {
  28. m_DirImageList.Detach( ) ;
  29. m_DirImageList.m_hImageList = NULL ;
  30. }
  31. BEGIN_MESSAGE_MAP(CDirListCtrl, CListCtrl)
  32. //{{AFX_MSG_MAP(CDirListCtrl)
  33. ON_WM_CREATE()
  34. ON_WM_LBUTTONDOWN()
  35. ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
  36. ON_WM_KEYDOWN()
  37. ON_WM_RBUTTONDOWN()
  38. ON_WM_RBUTTONUP()
  39. ON_WM_DESTROY()
  40. //}}AFX_MSG_MAP
  41. END_MESSAGE_MAP()
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CDirListCtrl message handlers
  44. int CDirListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  45. {
  46. if (CListCtrl::OnCreate(lpCreateStruct) == -1)
  47. return -1;
  48. // TODO: Add your specialized creation code here
  49. //get system default image list .
  50. GetSysImageList() ;
  51. InitList();
  52. return 0;
  53. }
  54. void CDirListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
  55. {
  56. // TODO: Add your message handler code here and/or call default
  57. CListCtrl::OnLButtonDown(nFlags, point);
  58. }
  59. void CDirListCtrl::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
  60. {
  61. // TODO: Add your control notification handler code here
  62. *pResult = 0;
  63. EnterSubDirectory( );
  64. }
  65. /****************************************************
  66. ** @Description
  67. ** This function get the system image list .
  68. **
  69. ** @Parameter
  70. ** void
  71. **
  72. ** @Return: if get success return true ,else return false  .
  73. ** @Author: Table.JHM.太子
  74. ** e-mail: tablejiang@21cn.com
  75. ** @Date: 2001 3 26
  76. ****************************************************/
  77. BOOL CDirListCtrl::GetSysImageList()
  78. {
  79. SHFILEINFO shFinfo;
  80. HIMAGELIST hImgList = NULL;
  81. //get system image list handle .
  82. hImgList = (HIMAGELIST)SHGetFileInfo( "C:\",
  83.   0,
  84.   &shFinfo,
  85.   sizeof( shFinfo ),
  86.   SHGFI_SYSICONINDEX | 
  87.   SHGFI_SMALLICON );
  88. if ( !hImgList )
  89. {
  90. return FALSE;
  91. }
  92. //attach the system image list .
  93. //m_DirImageList.Attach( hImgList ) ;
  94. m_DirImageList.m_hImageList = hImgList ;
  95. //attach the image list with CListCtrl .
  96. SetImageList( &m_DirImageList , LVSIL_SMALL ) ;
  97. return TRUE;   // OK
  98. }
  99. /****************************************************
  100. ** @Description
  101. ** This public function is display all item in a directory 
  102. the directory's path is stored int strPath var.
  103. **
  104. ** @Parameter
  105. ** LPCTSTR strPath : the directory's path 
  106. **
  107. ** @Return: true
  108. ** @Author: Table.JHM.太子
  109. ** e-mail: tablejiang@21cn.com
  110. ** @Date: 2001 3 26
  111. ****************************************************/
  112. BOOL CDirListCtrl::DisplayPath(LPCTSTR strPath)
  113. {
  114. CFileFind find ;
  115. CString Path = strPath ;
  116. BOOL bFind ;
  117. CSortStringArray strDirArray ;
  118. CSortStringArray strFileArray ;
  119. //must delete the old list item , before display the new path.
  120. DeleteAllItems( ) ;
  121. //Is the end char '' ? if not add it .
  122. if( Path.Right( 1 ) != '\' )
  123. Path += '\' ;
  124. //store the new path .
  125. m_NowListPath = Path ;
  126. //find the sub directroy in this directory .
  127. Path += "*.*" ;
  128. bFind = find.FindFile( Path ) ;
  129. while( bFind ) 
  130. {
  131. bFind = find.FindNextFile( ) ;
  132. if( find.IsDirectory() && !find.IsDots( ) )
  133. {
  134. //is directory .
  135. strDirArray.Add( find.GetFilePath() ) ;
  136. }
  137. if ( !find.IsDirectory() )
  138. {
  139. //is file .
  140. strFileArray.Add( find.GetFilePath() );
  141. }
  142. }
  143. //sort the item .
  144. strDirArray.Sort() ;
  145. m_dwItemNum = 0 ;
  146. //let the screen don't refurbish ,when insert item .
  147. SetRedraw( FALSE ) ;
  148. int i = 0 ;
  149. //add directory .
  150. for( i = 0 ; i < strDirArray.GetSize() ; i ++ )
  151. AddItem( strDirArray.GetAt( i ) );
  152. //add file.
  153. for( i = 0 ; i < strFileArray.GetSize() ; i ++ )
  154. AddItem( strFileArray.GetAt( i ) );
  155. SetRedraw( TRUE ) ;
  156. //notify the parent , the current directroy has changed.
  157. ::PostMessage( m_hParentWnd , LIST_CUR_DIR_CHANGED_MSG , 0 , 0 ) ;
  158. return true ;
  159. }
  160. /****************************************************
  161. ** @Description
  162. ** this protected function is used for add a item to 
  163. list .
  164. **
  165. ** @Parameter
  166. ** LPCTSTR strPath : the item path .
  167. **
  168. ** @Return: if success return true ,else false .
  169. ** @Author: Table.JHM.太子
  170. ** e-mail: tablejiang@21cn.com
  171. ** @Date: 2001 3 26
  172. ****************************************************/
  173. BOOL CDirListCtrl::AddItem(LPCTSTR strPath  )
  174. {
  175. SHFILEINFO shFileInfo ;
  176. int iIcon ;
  177. CString strTemp = strPath ;
  178. //add ''
  179. if ( strTemp.Right(1) != '\' )
  180.  strTemp += "\";
  181. //get the system icon index .
  182. if ( !SHGetFileInfo( strTemp,
  183. 0,
  184. &shFileInfo,
  185. sizeof( shFileInfo ),
  186. SHGFI_ICON | SHGFI_SMALLICON | 
  187. SHGFI_TYPENAME |SHGFI_DISPLAYNAME ) )
  188. {
  189. return false ;
  190. }
  191. iIcon = shFileInfo.iIcon;
  192. // we only need the index from the system image list
  193. DestroyIcon( shFileInfo.hIcon );
  194. //del the ''
  195. if ( strTemp.Right(1) == "\" )
  196. strTemp.SetAt( strTemp.GetLength() - 1, '' );
  197. //insert this item . need image and text .
  198. InsertItem( LVIF_IMAGE | LVIF_TEXT , m_dwItemNum , GetDisplayString( strTemp ) , 0 , 0 , 
  199. iIcon , 0 ) ;
  200. //because we need the file detailed info , so open 
  201. //the file read these .
  202. //  CreateFile () function use FILE_FLAG_BACKUP_SEMANTICS flags can 
  203. // open the directory .
  204. HANDLE hFile = CreateFile( (LPCTSTR)strTemp , 0 , 
  205. FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , 
  206. FILE_FLAG_BACKUP_SEMANTICS/*FILE_ATTRIBUTE_NORMAL*/ , 0 ) ;
  207. DWORD FileSizeHigh ;
  208. DWORD FileSizeLow ;
  209. FILETIME FileTime ;
  210. SYSTEMTIME SysTime ;
  211. char AddString[MAX_PATH] ;
  212. //get the file detailed info .
  213. if( hFile != INVALID_HANDLE_VALUE )
  214. {
  215. //file size
  216. FileSizeLow = GetFileSize( hFile ,  &FileSizeHigh ) ;
  217. if( FileSizeHigh != 0 )
  218. sprintf( AddString , "%d%d" , FileSizeHigh , FileSizeLow ) ;
  219. else
  220. sprintf( AddString , "%d" , FileSizeLow ) ;
  221. SetItemText( m_dwItemNum , 1 , AddString ) ;
  222. //file time
  223. GetFileTime( hFile , NULL , NULL , &FileTime ) ;
  224. FileTimeToSystemTime( &FileTime , &SysTime ) ;
  225. sprintf( AddString , "%d-%d-%d %d:%d" , SysTime.wYear , SysTime.wMonth , 
  226. SysTime.wDay , SysTime.wHour , SysTime.wMinute ) ;
  227. SetItemText( m_dwItemNum , 3 , AddString ) ;
  228. }
  229. CloseHandle( hFile ) ;
  230. hFile = NULL ;
  231. //file type 
  232. SetItemText( m_dwItemNum , 2 , shFileInfo.szTypeName ) ;
  233. m_dwItemNum ++ ;
  234. return true ;
  235. }
  236. /****************************************************
  237. ** @Description
  238. ** Init the list , insert column .
  239. **
  240. ** @Parameter
  241. ** void
  242. **
  243. ** @Return: true ;
  244. ** @Author: Table.JHM.太子
  245. ** e-mail: tablejiang@21cn.com
  246. ** @Date: 2001 3 26
  247. ****************************************************/
  248. BOOL CDirListCtrl::InitList()
  249. {
  250. RECT rect ;
  251. GetClientRect( &rect ) ;
  252. int iLength = ( rect.right - rect.left - 20 ) / 5 ;
  253. //insert Column
  254. InsertColumn( 0 , "名称" , LVCFMT_LEFT , iLength * 2 ) ;
  255. InsertColumn( 1 , "大小" , LVCFMT_RIGHT , iLength ) ;
  256. InsertColumn( 2 , "类型" , LVCFMT_LEFT, iLength ) ;
  257. InsertColumn( 3 , "修改时间" , LVCFMT_LEFT, iLength ) ;
  258. return true ;
  259. }
  260. /****************************************************
  261. ** @Description
  262. ** getting the last SubPath from a PathString
  263. e.g. C:tempreadme.txt
  264. the result = readme.txt
  265. **
  266. ** @Parameter
  267. ** LPCTSTR strPath : the path .
  268. **
  269. ** @Return: the result string ;
  270. ** @Author: Table.JHM.太子
  271. ** e-mail: tablejiang@21cn.com
  272. ** @Date: 2001 3 26
  273. ****************************************************/
  274. LPCTSTR CDirListCtrl::GetDisplayString(LPCTSTR strPath)
  275. {
  276. static CString strTemp;
  277. int     iPos;
  278. strTemp = strPath;
  279. if ( strTemp.Right(1) == '\' )
  280.  strTemp.SetAt( strTemp.GetLength() - 1, '' );
  281. iPos = strTemp.ReverseFind( '\' );
  282. if ( iPos != -1 )
  283.     strTemp = strTemp.Mid( iPos + 1);
  284. return (LPCTSTR)strTemp;
  285. }
  286. /****************************************************
  287. ** @Description
  288. ** this public function is use for enter father directroy .
  289. and refurbish the list .
  290. **
  291. ** @Parameter
  292. ** void
  293. **
  294. ** @Return: true .
  295. ** @Author: Table.JHM.太子
  296. ** e-mail: tablejiang@21cn.com
  297. ** @Date: 2001 3 26
  298. ****************************************************/
  299. BOOL CDirListCtrl::UpDirectory()
  300. {
  301. CString strDisplayPath ;
  302. strDisplayPath = GetFatherDirectory( m_NowListPath ) ;
  303. if( strDisplayPath == m_NowListPath )
  304. return true ;
  305. DisplayPath( strDisplayPath ) ;
  306. return true ;
  307. }
  308. /****************************************************
  309. ** @Description
  310. ** this protected function is used for get father path .
  311. ** e.g. C:windowstemp.
  312. the result: C:windows
  313. but : e.g. C:
  314. result is C:
  315. ** @Parameter
  316. ** LPCTSTR szPath : the input path .
  317. **
  318. ** @Return: the result path .
  319. ** @Author: Table.JHM.太子
  320. ** e-mail: tablejiang@21cn.com
  321. ** @Date: 2001 3 26
  322. ****************************************************/
  323. CString CDirListCtrl::GetFatherDirectory(LPCTSTR szPath)
  324. {
  325. CString Path = szPath ;
  326. if( Path.Right( 1 ) == "\" )
  327. {
  328. Path.SetAt( Path.GetLength() - 1 , '' ) ;
  329. }
  330. int iPos = Path.ReverseFind( '\' ) ;
  331. if( iPos == -1 )
  332. return Path ;
  333. else
  334. Path.SetAt( iPos , '' ) ;
  335. return Path ;
  336. }
  337. /****************************************************
  338. ** @Description
  339. ** this protected function is used for enter the select 
  340. item directory .
  341. **
  342. ** @Parameter
  343. ** void
  344. **
  345. ** @Return: if succsee return true ,else false .
  346. ** @Author: Table.JHM.太子
  347. ** e-mail: tablejiang@21cn.com
  348. ** @Date: 2001 3 26
  349. ****************************************************/
  350. BOOL CDirListCtrl::EnterSubDirectory()
  351. {
  352. //check the select count .
  353. int iCount = GetSelectedCount();
  354. if(  iCount != 1 )
  355. return false ;
  356. int iCurSel = GetNextItem( -1 , LVNI_SELECTED ) ;
  357. char szText[MAX_PATH] ;
  358. szText[0] = 0 ;
  359. GetItemText( iCurSel , 0 , szText , MAX_PATH ) ;
  360. CString strDisplayPath ;
  361. strDisplayPath = m_NowListPath ;
  362. strDisplayPath += szText ;
  363. //check the path name .
  364. //if is a file , run it .
  365. //if is a directory , enter it .
  366. if( PathIsDirectory( strDisplayPath ) )
  367. DisplayPath( strDisplayPath ) ;
  368. else
  369. {
  370. ShellExecute( NULL , "open" , strDisplayPath , NULL , NULL , SW_NORMAL ) ;
  371. }
  372. return true ;
  373. }
  374. /****************************************************
  375. ** @Description
  376. ** this public function is used for get now select path.
  377. **
  378. ** @Parameter
  379. ** void
  380. **
  381. ** @Return: the select path .
  382. ** @Author: Table.JHM.太子
  383. ** e-mail: tablejiang@21cn.com
  384. ** @Date: 2001 3 26
  385. ****************************************************/
  386. CString CDirListCtrl::GetNowSelectPath()
  387. {
  388. CString strDisplayPath ;
  389. strDisplayPath = m_NowListPath ;
  390. //check the select count .
  391. int iCount = GetSelectedCount();
  392. if( iCount > 1 || iCount <= 0)
  393. return strDisplayPath ;
  394. int iCurSel = GetNextItem( -1 , LVNI_SELECTED ) ;
  395. char szText[MAX_PATH] ;
  396. szText[0] = 0 ;
  397. GetItemText( iCurSel , 0 , szText , MAX_PATH ) ;
  398. strDisplayPath += szText ;
  399. return strDisplayPath ;
  400. }
  401. /****************************************************
  402. ** @Description
  403. ** this public function is used for get the now list path 
  404. **
  405. ** @Parameter
  406. ** void
  407. **
  408. ** @Return: now list path .
  409. ** @Author: Table.JHM.太子
  410. ** e-mail: tablejiang@21cn.com
  411. ** @Date: 2001 3 26
  412. ****************************************************/
  413. CString CDirListCtrl::GetNowListPath()
  414. {
  415. char szPath[MAX_PATH]  ;
  416. int  iLength = 0 ;
  417. strcpy( szPath , m_NowListPath ) ;
  418. iLength = strlen( szPath ) ;
  419. if( szPath[iLength - 1 ] != '\' )
  420. {
  421. szPath[iLength] = '\';
  422. szPath[iLength+1] = '' ;
  423. }
  424. return szPath ;
  425. }
  426. /****************************************************
  427. ** @Description
  428. ** this public function is used for set the parent 
  429. window's handle.
  430. **
  431. ** @Parameter
  432. ** HWND hWnd : parent window handle 
  433. **
  434. ** @Return: void
  435. ** @Author: Table.JHM.太子
  436. ** e-mail: tablejiang@21cn.com
  437. ** @Date: 2001 3 26
  438. ****************************************************/
  439. void CDirListCtrl::SetParentWnd(HWND hWnd)
  440. {
  441. m_hParentWnd = hWnd ;
  442. }
  443. void CDirListCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  444. {
  445. // TODO: Add your message handler code here and/or call default
  446. switch( nChar )
  447. {
  448. case VK_BACK :
  449. {
  450. UpDirectory() ;
  451. }
  452. break ;
  453. case VK_RETURN :
  454. {
  455. EnterSubDirectory( );
  456. }
  457. break ;
  458. case VK_DELETE :
  459. {
  460. DeleteSelectItem( ) ;
  461. }
  462. break ;
  463. case VK_F2 :
  464. {
  465. RenameSelectItem( ) ;
  466. }
  467. break ;
  468. case VK_F5:
  469. {
  470. DisplayPath( m_NowListPath ) ;
  471. }
  472. break ;
  473. default :
  474. break ;
  475. }
  476. CListCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
  477. }
  478. /****************************************************
  479. ** @Description
  480. ** this public function is used for 
  481. delete select file .
  482. **
  483. ** @Parameter
  484. ** void
  485. **
  486. ** @Return: if delete success return true ,else return false 
  487. ** @Author: Table.JHM.太子
  488. ** e-mail: tablejiang@21cn.com
  489. ** @Date: 2001 3 26
  490. ****************************************************/
  491. BOOL CDirListCtrl::DeleteSelectItem()
  492. {
  493. UINT i, uSelectedCount ;
  494. int  nItem = -1;
  495. char szPath[MAX_PATH] ;
  496. CFileManageLib fileman ;
  497. strcpy( szPath , m_NowListPath) ;
  498. int iLength = strlen( szPath );
  499. if( szPath[iLength-1] != '\' )
  500. {
  501. szPath[iLength] = '\';
  502. szPath[iLength+1] = '' ;
  503. }
  504. char szDelFile[MAX_PATH] ;
  505. uSelectedCount = GetSelectedCount() ;
  506. // delete all of the selected items.
  507. if (uSelectedCount > 0)
  508. {
  509. for (i=0;i < uSelectedCount;i++)
  510. {
  511. memset( szDelFile , 0 , MAX_PATH ) ;
  512. nItem = GetNextItem(nItem, LVNI_SELECTED);
  513. ASSERT(nItem != -1);
  514. char szText[MAX_PATH] ;
  515. szText[0] = 0 ;
  516. GetItemText( nItem , 0 , szText , MAX_PATH ) ;
  517. sprintf( szDelFile , "%s%s" , szPath , szText ) ;
  518. // add file path name to delete queue .
  519. fileman.AddFromFileList( szDelFile ) ;
  520. }
  521. }
  522. //delete!
  523. BOOL bRet = fileman.DeleteFile( ) ;
  524. DisplayPath( m_NowListPath ) ;
  525. return bRet ;
  526. }
  527. /****************************************************
  528. ** @Description
  529. ** this public function is used for 
  530. rename select file .
  531. **
  532. ** @Parameter
  533. ** void
  534. **
  535. ** @Return: if delete success return true ,else return false 
  536. ** @Author: Table.JHM.太子
  537. ** e-mail: tablejiang@21cn.com
  538. ** @Date: 2001 3 26
  539. ****************************************************/
  540. BOOL CDirListCtrl::RenameSelectItem()
  541. {
  542. UINT uSelectedCount ;
  543. int  nItem = -1;
  544. char szPath[MAX_PATH] ;
  545. CFileManageLib fileman ;
  546. //check count .
  547. uSelectedCount = GetSelectedCount( ) ;
  548. if( uSelectedCount != 1 )
  549. return false ;
  550. strcpy( szPath , m_NowListPath) ;
  551. int iLength = strlen( szPath );
  552. if( szPath[iLength-1] != '\' )
  553. {
  554. szPath[iLength] = '\';
  555. szPath[iLength+1] = '' ;
  556. }
  557. char szText[MAX_PATH] ;
  558. szText[0] = '';
  559. //make the path .
  560. int iCurSel = GetNextItem( nItem , LVNI_SELECTED ) ;
  561. GetItemText( iCurSel , 0 , szText , MAX_PATH ) ;
  562. CInputFileNameDlg dlg ;
  563. dlg.m_strName = szText ;
  564. if( dlg.DoModal() == IDOK )
  565. {
  566. char szDes[MAX_PATH] ;
  567. char szSrc[MAX_PATH] ;
  568. sprintf( szDes , "%s%s" , szPath , dlg.m_strName ) ;
  569. sprintf( szSrc , "%s%s" , szPath , szText ) ;
  570. fileman.AddFromFileList( szSrc ) ;
  571. fileman.AddToFileList( szDes ) ;
  572. BOOL bRet = fileman.RenameFile( );
  573. DisplayPath( m_NowListPath ) ;
  574. return bRet ;
  575. }
  576. return false ;
  577. }
  578. /****************************************************
  579. ** @Description
  580. ** this public function is used for 
  581. delete select file .
  582. **
  583. ** @Parameter
  584. ** void
  585. **
  586. ** @Return: if delete success return true ,else return false 
  587. ** @Author: Table.JHM.太子
  588. ** e-mail: tablejiang@21cn.com
  589. ** @Date: 2001 3 26
  590. ****************************************************/
  591. BOOL CDirListCtrl::MoveSelectFile( LPCTSTR szDesPath )
  592. {
  593. UINT i, uSelectedCount ;
  594. int  nItem = -1;
  595. char szPath[MAX_PATH] ;
  596. CFileManageLib fileman ;
  597. strcpy( szPath , m_NowListPath) ;
  598. int iLength = strlen( szPath );
  599. if( szPath[iLength-1] != '\' )
  600. {
  601. szPath[iLength] = '\';
  602. szPath[iLength+1] = '' ;
  603. }
  604. char szSrcFile[MAX_PATH] ;
  605. uSelectedCount = GetSelectedCount() ;
  606. // move all of the selected items.
  607. if (uSelectedCount > 0)
  608. {
  609. for (i=0;i < uSelectedCount;i++)
  610. {
  611. memset( szSrcFile , 0 , MAX_PATH ) ;
  612. nItem = GetNextItem(nItem, LVNI_SELECTED);
  613. ASSERT(nItem != -1);
  614. char szText[MAX_PATH] ;
  615. szText[0] = 0 ;
  616. GetItemText( nItem , 0 , szText , MAX_PATH ) ;
  617. sprintf( szSrcFile , "%s%s" , szPath , szText) ;
  618. if( strcmp( szSrcFile , szDesPath ) != 0 )
  619. {
  620. fileman.AddFromFileList( szSrcFile ) ;
  621. fileman.AddToFileList( szDesPath ) ;
  622. }
  623. }
  624. }
  625. BOOL bRet = fileman.MoveFile( ) ;
  626. DisplayPath( m_NowListPath ) ;
  627. return bRet ;
  628. }
  629. void CDirListCtrl::OnRButtonDown(UINT nFlags, CPoint point) 
  630. {
  631. // TODO: Add your message handler code here and/or call default
  632. ::PostMessage( m_hParentWnd , DIR_LIST_RCLK_MSG , 0 , 0 ) ;
  633. CListCtrl::OnRButtonDown(nFlags, point);
  634. }
  635. void CDirListCtrl::OnRButtonUp(UINT nFlags, CPoint point) 
  636. {
  637. // TODO: Add your message handler code here and/or call default
  638. CListCtrl::OnRButtonUp(nFlags, point);
  639. }
  640. void CDirListCtrl::OnDestroy() 
  641. {
  642. //must detach the system image list .
  643. //because the object will be destroy , the 
  644. //system image list will be destroy too.
  645. SetImageList( NULL , LVSIL_SMALL ) ;
  646. m_DirImageList.Detach(  ) ;
  647. CListCtrl::OnDestroy();
  648. // TODO: Add your message handler code here
  649. }
  650. /****************************************************
  651. ** @Description
  652. ** this function set all item selected status.
  653. **
  654. ** @Parameter
  655. ** void
  656. **
  657. ** @Return: true .
  658. ** @Author: Table.JHM.太子
  659. ** e-mail: tablejiang@21cn.com
  660. ** @Date: 2001 3 26
  661. ****************************************************/
  662. BOOL CDirListCtrl::SelectAllItem()
  663. {
  664. int iCount = GetItemCount( ) ;
  665. if( iCount == 0  )
  666. return true ;
  667. for( int i = 0 ; i < iCount ; i ++ )
  668. {
  669. SetItemState( i , LVIS_SELECTED  , LVIS_SELECTED  ) ;
  670. }
  671. return true ;
  672. }