FavoriteBar.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:5k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // FavoriteBar.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "IE.h"
  5. #include "FavoriteBar.h"
  6. #include <wininet.h>
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CFavoriteBar
  14. CFavoriteBar::CFavoriteBar()
  15. {
  16. this->favoritePath = "";
  17. }
  18. CFavoriteBar::~CFavoriteBar()
  19. {
  20. }
  21. BEGIN_MESSAGE_MAP(CFavoriteBar, CSizingControlBar)
  22. //{{AFX_MSG_MAP(CFavoriteBar)
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CFavoriteBar message handlers
  27. BOOL CFavoriteBar::Create( CFrameWnd * pParentWnd )
  28. {
  29. if( CSizingControlBar::Create( "收藏夹" , pParentWnd, CSize( 230 , 260 ) , FALSE , 1 ) )
  30. {
  31. this->SetBarStyle( this->GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC );
  32. this->SetSCBStyle( SCBS_SIZECHILD );
  33. this->EnableDocking( CBRS_ALIGN_LEFT );
  34. pParentWnd->EnableDocking( CBRS_ALIGN_ANY );
  35. pParentWnd->DockControlBar( this , AFX_IDW_DOCKBAR_LEFT );
  36. this->m_tree.Create( WS_CHILD | WS_VISIBLE | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | TVS_INFOTIP | WS_BORDER | WS_TABSTOP , CRect( 0 , 0 , 1 , 1 ) , this , IDC_TREE );
  37.         //创建收藏夹
  38. this->GetFavoriteFolder( this->favoritePath );
  39. SHFILEINFO shFinfo;
  40. HIMAGELIST imglist = ( HIMAGELIST )SHGetFileInfo( "C:\" , 0 , &shFinfo , sizeof( shFinfo ) , SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
  41. this->m_tree.SendMessage( TVM_SETIMAGELIST , (WPARAM )TVSIL_NORMAL , ( LPARAM )imglist );
  42. SHGetFileInfo( this->favoritePath , 0 , &shFinfo , sizeof( shFinfo ) , SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
  43. int n = shFinfo.iIcon;
  44. SHGetFileInfo( this->favoritePath , 0 , &shFinfo , sizeof( shFinfo ) , SHGFI_SYSICONINDEX | SHGFI_OPENICON );
  45. HTREEITEM h = this->m_tree.InsertItem( "收藏夹" , n , shFinfo.iIcon );
  46. this->BuildFavorites( this->favoritePath , h );
  47. // ScrollBar( this->m_tree.GetSafeHwnd( ) );
  48. // this->m_tree.Expand( h , TVE_EXPAND );
  49. return TRUE;
  50. }
  51. return FALSE;
  52. }
  53. //取得收藏夹的路径
  54. void CFavoriteBar::GetFavoriteFolder( CString & strPath )
  55. {
  56. strPath = "";
  57. LPITEMIDLIST pidlFavorites = NULL;
  58. IMalloc * m_pMalloc = NULL;
  59. if( SUCCEEDED( SHGetMalloc( &m_pMalloc ) ) )
  60. {
  61. if( SHGetSpecialFolderLocation( NULL, CSIDL_FAVORITES, &pidlFavorites ) == NOERROR )
  62. {
  63. SHGetPathFromIDList( pidlFavorites , strPath.GetBufferSetLength( MAX_PATH ) );
  64. strPath.ReleaseBuffer( );
  65. }
  66. m_pMalloc->Free( pidlFavorites );
  67. m_pMalloc->Release();
  68. }
  69. }
  70. void CFavoriteBar::BuildFavorites( CString strPath , HTREEITEM hTree )
  71. {
  72. CFileFind find;
  73. if( strPath[ strPath.GetLength( ) - 1 ] != '\' )
  74. strPath += "\";
  75. strPath += "*.*";
  76. if( ! find.FindFile( strPath ) )
  77. return;
  78. CString name;
  79. int i , n , s;
  80. SHFILEINFO shFinfo;
  81. while( find.FindNextFile( ) )
  82. {
  83. if( find.IsDots( ) )
  84. continue;
  85. name = find.GetFileName( );
  86. if( ( i = name.ReverseFind( '.' ) ) != -1 )
  87. name = name.Left( i );
  88. if( find.IsDirectory( ) )
  89. {
  90.     SHGetFileInfo( find.GetFilePath( ) , 0 , &shFinfo , sizeof( shFinfo ) , SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
  91. n = shFinfo.iIcon;
  92. SHGetFileInfo( find.GetFilePath( ) , 0 , &shFinfo , sizeof( shFinfo ) , SHGFI_SYSICONINDEX | SHGFI_OPENICON );
  93. s = shFinfo.iIcon;
  94. HTREEITEM h = this->m_tree.InsertItem( name , n , s , hTree );
  95. BuildFavorites( find.GetFilePath( ) , h );
  96. }
  97. else 
  98. {
  99. SHGetFileInfo( find.GetFilePath( ) , 0 , &shFinfo , sizeof( shFinfo ) , SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
  100. n = shFinfo.iIcon;
  101. SHGetFileInfo( find.GetFilePath( ) , 0 , &shFinfo , sizeof( shFinfo ) , SHGFI_SYSICONINDEX | SHGFI_OPENICON );
  102. s = shFinfo.iIcon;
  103. this->m_tree.InsertItem( name , n ,s , hTree );
  104. }
  105. }
  106. }
  107. void CFavoriteBar::GetCurURL( CString & url )
  108. {
  109. this->GetCurFullName( url );
  110. if( url.IsEmpty( ) )
  111. return;
  112. CString path( url );
  113. url.Empty( );
  114. ::GetPrivateProfileString(_T("InternetShortcut"), _T("URL") , _T(""), url.GetBufferSetLength( INTERNET_MAX_PATH_LENGTH ), INTERNET_MAX_PATH_LENGTH , path );
  115. url.ReleaseBuffer( );
  116. }
  117. void CFavoriteBar::GetCurFullName( CString & name )
  118. {
  119. name.Empty( );
  120. CPoint pt;
  121. ::GetCursorPos( &pt );
  122. this->m_tree.ScreenToClient( &pt );
  123. UINT flag;
  124. HTREEITEM item = this->m_tree.HitTest( pt , &flag );
  125. if( ! item || this->m_tree.Expand( item , TVE_EXPAND ) )
  126. return;
  127. name = this->m_tree.GetItemText( item );
  128. while( item )
  129. {
  130. item = this->m_tree.GetParentItem( item );
  131. if( item )
  132. name = this->m_tree.GetItemText( item ) + "\" + name;
  133. }//去掉"收藏夹"
  134. name.Delete( 0 , 7 );
  135. name = this->favoritePath + "\" + name + ".url";
  136. }