SwList.cpp
上传用户:swkcbjrc
上传日期:2016-04-02
资源大小:45277k
文件大小:7k
源码类别:

游戏

开发平台:

Visual C++

  1. /*///////////////////////////////////////////////////////////////////
  2. Copyright(c) 2000, Masoud Samimi - All Rights Reserved.
  3. File: FavorList.cpp - implementation file of favorite list box
  4. History: Created 14/12/2000 (dd/mm/yyyy)
  5. Used for: Loads all your favorites URLs from the 
  6. windows favorites directory "C:windowsfavorites"
  7. and adds/displays them inside the list box
  8. Deriving: This class can be used as a base class to your own 
  9. derived class inorder to have your own specialized
  10. AddString(you rown stuff) by just overriding one 
  11. virtual function the PreSubclassWindow() funtion.
  12. Notes: This class and the code is freely destributed, you
  13. cannot sell it. You can modify to fit your own
  14. style, but you will have to mention your changes and
  15. your name here in the changes log below!
  16. Whatever you do, please do not remove this info header
  17. from the files.
  18. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  19. Changes: ---->
  20. By: ---->
  21. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  22.   
  23. ////////////////////////////////
  24. List of further enhancements:
  25. 1. To add all the subdiretctory URLs as well.
  26.   
  27. 2. To add a tree control! if possible, to have
  28.      the top level directories as expandable parents 
  29.  and the URLs files as children.
  30.  ( Something like the Windows Explorer! )
  31. 3. Add your wishes! :)
  32. ////////////////////////////////
  33. //////////////////////////////////////////////////////////////////*/
  34. #include "stdafx.h"
  35. //#include "MyFavourites.h"
  36. #include "swList.h"
  37. #ifdef _DEBUG
  38. #define new DEBUG_NEW
  39. #undef THIS_FILE
  40. static char THIS_FILE[] = __FILE__;
  41. #endif
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CFavorList
  44. CFavorList::CFavorList()
  45. {
  46. backBrush.CreateSolidBrush(RGB(0,0,0));
  47. hCursor = AfxGetApp()->LoadStandardCursor(MAKEINTRESOURCE(32649));//IDC_HAND);
  48. hFind = NULL;
  49. }
  50. CFavorList::~CFavorList()
  51. {
  52. }
  53. BEGIN_MESSAGE_MAP(CFavorList, CListBox)
  54. //{{AFX_MSG_MAP(CFavorList)
  55. ON_WM_CTLCOLOR_REFLECT()
  56. ON_CONTROL_REFLECT(LBN_SELCHANGE, OnSelchange)
  57. ON_WM_DESTROY()
  58. ON_WM_MOUSEMOVE()
  59. ON_CONTROL_REFLECT(LBN_DBLCLK, OnDblclk)
  60. //}}AFX_MSG_MAP
  61. END_MESSAGE_MAP()
  62. /////////////////////////////////////////////////////////////////////////////
  63. // CFavorList message handlers
  64. HBRUSH CFavorList::CtlColor(CDC* pDC, UINT nCtlColor) 
  65. {
  66. pDC->SetTextColor(RGB(205,205,0));
  67. pDC->SetBkMode(TRANSPARENT);
  68. return (HBRUSH) backBrush;
  69. }
  70. void CFavorList::OnSelchange() 
  71. {
  72. return;
  73. SetCursor(hCursor);
  74. CString url = _T("");
  75. int index = GetCurSel();
  76. GetText(index, url);
  77. //
  78. // Create and initialize a tooltip control.
  79. //
  80.     m_ctlTT.Create (this);
  81. CRect rect;
  82. GetWindowRect(&rect);
  83. int url_length = url.GetLength(); 
  84. int width = rect.Width()/7+50;
  85. if(url_length > width){
  86. m_ctlTT.AddWindowTool(this,
  87. url.GetBuffer(1024));
  88. }
  89. url.ReleaseBuffer();
  90. }
  91. void CFavorList::OnDestroy() 
  92. {
  93. CListBox::OnDestroy();
  94. backBrush.DeleteObject(); // delete background brush
  95. }
  96. void CFavorList::OnMouseMove(UINT nFlags, CPoint point) 
  97. {
  98. SetCursor(hCursor);
  99. CListBox::OnMouseMove(nFlags, point);
  100. }
  101. void CFavorList::OnDblclk() 
  102. {
  103. return;
  104. CString url = _T("");
  105. int index = GetCurSel();
  106. GetText(index, url);
  107. iReturn = (int) ShellExecute(NULL, "open", url, NULL, NULL, 0);
  108.           // If ShellExecute returns an error code, let the user know.
  109.      if (iReturn <= 32)
  110.      {
  111.           wsprintf (szBuffer, 
  112.                     "Cannot launch browser and cannot continue! "
  113.                     "(ShellExecute error code is %i)", iReturn) ;
  114.           MessageBox (szBuffer, "Error!", MB_OK | MB_ICONEXCLAMATION) ;
  115.      }
  116.  if(url.GetLength()==0){
  117.   wsprintf (szBuffer, 
  118.                     "This is an empty entry! Try clicking a filled link! "
  119. "(ShellExecute error code is %i)", iReturn) ;
  120.           MessageBox (szBuffer, "Error!", MB_OK | MB_ICONEXCLAMATION) ;
  121. }
  122.  
  123.  url.ReleaseBuffer();
  124.  
  125. }
  126. void CFavorList::PreSubclassWindow() 
  127. {
  128. GetFavoritesDirectory();
  129. LoadFiles();
  130. SetCurSel(0);
  131. CListBox::PreSubclassWindow();
  132. }
  133. int CFavorList::GetFavoritesDirectory()
  134. {
  135. return 0;
  136. lReturn = RegOpenKeyEx(HKEY_CURRENT_USER,
  137. "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",
  138. 0, KEY_QUERY_VALUE, &hKey);
  139. if(lReturn != ERROR_SUCCESS)
  140. {
  141. MessageBox("Cannot obtain Favourites directory and cannot continue!",
  142. "Error!", MB_OK|MB_ICONEXCLAMATION);
  143. return 0;
  144. }
  145. dwLength = sizeof(szFavoritesDir);
  146.  lReturn = RegQueryValueEx (hKey, "Favorites", NULL,
  147.                                 &dwType, szFavoritesDir, &dwLength) ;
  148. if(lReturn != ERROR_SUCCESS)
  149. {
  150. MessageBox("Cannot obtain Favourites directory and cannot continue!",
  151. "Error!", MB_OK|MB_ICONEXCLAMATION);
  152. return 0;
  153. }
  154. return 0;
  155. }
  156. void CFavorList::LoadFiles()
  157. {
  158. ::SetCurrentDirectory((const char*) szFavoritesDir);
  159. hFind = ::FindFirstFile (_T ("*.url"), &fd);
  160. if (hFind != INVALID_HANDLE_VALUE) {
  161. do {
  162. if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
  163. AddString(fd.cFileName);
  164. } while (::FindNextFile (hFind, &fd));
  165. ::FindClose (hFind);
  166. }
  167. }
  168. void CFavorList::EnumerateFolders ()
  169. {
  170.     
  171. hFind = ::FindFirstFile (_T ("*.*"), &fd);
  172.     if (hFind != INVALID_HANDLE_VALUE) {
  173.         do {
  174.             if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
  175.                 CString name = fd.cFileName;
  176.                 if (name != _T (".") && name != _T ("..")) {
  177.                     TRACE (_T ("%sn"), fd.cFileName);
  178.                     ::SetCurrentDirectory (fd.cFileName);
  179.     EnumerateFolders ();
  180.                     ::SetCurrentDirectory (_T (".."));
  181.                 }
  182.             }
  183.         } while (::FindNextFile (hFind, &fd));
  184.         ::FindClose (hFind);
  185.     }
  186. }
  187. /////////////////////////////////////////////////////////////////////////////
  188. // CMyToolTipCtrl
  189. CMyToolTipCtrl::CMyToolTipCtrl()
  190. {
  191. }
  192. CMyToolTipCtrl::~CMyToolTipCtrl()
  193. {
  194. }
  195. BEGIN_MESSAGE_MAP(CMyToolTipCtrl, CToolTipCtrl)
  196. //{{AFX_MSG_MAP(CMyToolTipCtrl)
  197. // NOTE - the ClassWizard will add and remove mapping macros here.
  198. //}}AFX_MSG_MAP
  199. END_MESSAGE_MAP()
  200. /////////////////////////////////////////////////////////////////////////////
  201. // CMyToolTipCtrl message handlers
  202. BOOL CMyToolTipCtrl::AddWindowTool(CWnd *pWnd, LPCTSTR pszText)
  203. {
  204.     TOOLINFO ti;
  205.     ti.cbSize = sizeof (TOOLINFO);
  206.     ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
  207.     ti.hwnd = pWnd->GetParent ()->GetSafeHwnd ();
  208.     ti.uId = (UINT) pWnd->GetSafeHwnd ();
  209.     ti.hinst = AfxGetInstanceHandle ();
  210.     ti.lpszText = (LPTSTR) pszText;
  211.     return (BOOL) SendMessage (TTM_ADDTOOL, 0, (LPARAM) &ti);
  212. }