显示磁盘目录(二十)

 

显示磁盘目录 ( 二十 )
本文讲述如何用 TreeControl 控件来显示磁盘目录。
1.      创建对话框工程: DiskTreeDirectory
2.      添加一个 TreeControl 控件。
3.      声明几个变量如下:
       CImageList imlst ;
       int imindex ;
       SHFILEINFO fileinfo ;
4.      OnInitDialog () 添加代码如下:
       imlst . Create (16,16, ILC_COLOR32 | ILC_MASK ,0,0);
       m_trdisktree . SetImageList (& imlst , TVSIL_NORMAL );
       m_trdisktree . ModifyStyle (0L, TVS_HASLINES | TVS_LINESATROOT );
       size_t alldriver = :: GetLogicalDriveStrings (0, NULL );
       _TCHAR * driverstr ;
       driverstr = new _TCHAR [ alldriver + sizeof ( _T ( "" ))];
       if ( GetLogicalDriveStrings ( alldriver , driverstr )!= alldriver -1)
              return FALSE ;
       _TCHAR * pdriverstr = driverstr ;
       size_t driversize = strlen ( pdriverstr );
 
       HTREEITEM disktree ;
 
       while ( driversize >0)
       {
              SHGetFileInfo ( pdriverstr ,0,& fileinfo , sizeof ( fileinfo ), SHGFI_ICON );
              imindex = imlst . Add ( fileinfo . hIcon );
              disktree = m_trdisktree . InsertItem ( pdriverstr , imindex , imindex , TVI_ROOT , TVI_LAST );
              pdriverstr += driversize + 1;
              driversize = strlen ( pdriverstr );
       }
5.      TreeControl 相应 TVN_SELCHANGED ,代码如下:
      
       CFileFind filefd ;
       HTREEITEM parent ;
       HTREEITEM rootitem = m_trdisktree . GetSelectedItem ();
       if ( m_trdisktree . GetChildItem ( rootitem )) return ;
       parent = rootitem ;
       CString rootstr = m_trdisktree . GetItemText ( rootitem );
       CString temp ;
       CString lstr ;
       if ( rootstr . Find ( "//" ) == 2)
       {
              lstr . Format ( "%s*.*" , rootstr );
       }
       else
       {
              CString strparent ;
              while (1)
              {
                     parent = m_trdisktree . GetParentItem ( parent );
                     strparent = m_trdisktree . GetItemText ( parent );
                     if ( strparent . Find ( "//" ) ==2)
                            goto end ;
                     temp += strparent ;
                     temp += "//" ;
              }
end :
              CString root = m_trdisktree . GetItemText ( parent );
              lstr . Format ( "%s%s%s//*.*" , root , temp , rootstr );
             
       }
 
       BOOL bfinded = filefd . FindFile ( lstr );
       while ( bfinded )
       {
              bfinded = filefd . FindNextFile ();
              CString filepath ;
              if ( filefd . IsDirectory ()&&! filefd . IsDots ())
              {
                     SHGetFileInfo ( filefd . GetFilePath (),0,& fileinfo , sizeof ( fileinfo ), SHGFI_ICON );
                     imindex = imlst . Add ( fileinfo . hIcon );
                     m_trdisktree . InsertItem ( filefd . GetFileName (), imindex , imindex , rootitem );
              }
       }
完成。

 

你可能感兴趣的:(null,磁盘)