IEShellListCtrl.h
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
源码类别:

图形图象

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // You may use this source code, compile or redistribute it as part of your application 
  5. // for free. You cannot redistribute it as a part of a software development 
  6. // library without the agreement of the author. If the sources are 
  7. // distributed along with the application, you should leave the original 
  8. // copyright notes in the source code without any changes.
  9. // This code can be used WITHOUT ANY WARRANTIES at your own risk.
  10. // 
  11. // For the latest updates to this code, check this site:
  12. // http://www.masmex.com 
  13. // after Sept 2000
  14. // 
  15. // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
  16. //*******************************************************************************
  17. #ifndef __IESHELLLISTCTRL_H__
  18. #define __IESHELLLISTCTRL_H__
  19. #ifndef __AFXMT_H__
  20. #include "afxmt.h"
  21. #endif
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. typedef struct SLC_COLUMN_DATA
  26. {
  27. SLC_COLUMN_DATA() { pidl = NULL; iImage = -1;} 
  28. CStringArray sItems;
  29. LPITEMIDLIST pidl;
  30. int iImage;
  31. } SLC_COLUMN_DATA, *PSLC_COLUMN_DATA;
  32. class CCF_HDROP;
  33. // IEShellListCtrl.h : header file
  34. //
  35. #include <afxpriv.h>
  36. #include "UICtrl.h"
  37. #include "ShellPidl.h"
  38. #include "ShellDetails.h"
  39. #include "ShellSettings.h"
  40. #include "Refresh.h"
  41. #include "IEShellDragDrop.h"
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CIEShellListCtrl window
  44. #include <vector>
  45. using namespace std;
  46. typedef vector<LPLVITEMDATA> vecListItemData;
  47. class CTRL_EXT_CLASS CIEShellListCtrl : public CUIODListCtrl
  48. {
  49. // Construction
  50. public:
  51. CIEShellListCtrl();
  52. enum Cols
  53. {
  54. COL_NAME,
  55. COL_SIZE,
  56. COL_TYPE,
  57. COL_MODIFIED,
  58. COL_MAX
  59. };
  60. // Attributes
  61. public:
  62. void SetFileFilter(LPCTSTR pszFilter) { m_sFileFilter = pszFilter; }
  63. CString GetFileFilter() { return m_sFileFilter.IsEmpty() ? _T("*.*") : m_sFileFilter; }
  64. void SetNotifyParent(bool bNotifyParent) { m_bNotifyParent = bNotifyParent; }
  65. void NoExtAllowed() { m_bNoExt = true; }
  66. void ExcludeFileType(LPCTSTR pszType) { m_ExcludedLookup.AddHead(pszType); }
  67. CStringList &GetExcludedFileTypes() { return m_ExcludedLookup; }
  68. void FillExcludedFileTypes(CComboBox &cb);
  69. void SetExcludedFileTypes(CComboBox &cb);
  70. bool RefreshAllowed() { return m_bRefreshAllowed; }
  71. void SetRefreshAllowed(bool bRefresh) { m_bRefreshAllowed = bRefresh; } 
  72. CShellPidl &GetShellPidl() { return m_ShellPidl; }
  73. LPMALLOC GetMalloc() { return m_pMalloc; }
  74. LPTVITEMDATA GetTVID() { return &m_tvid; }
  75. LPSHELLFOLDER GetShellFolder() { return m_tvid.lpsfParent; }
  76. bool GetCallBack() { return m_bCallBack; }
  77. CString GetPathName(int nRow);
  78. CString GetCurrPathName();
  79. LPCITEMIDLIST GetPathPidl(int nRow);
  80. const CShellSettings &GetShellSettings() const;
  81. CShellSettings &GetShellSettings();
  82. // Operations
  83. public:
  84. virtual void PopupTheMenu(int nRow,CPoint point);
  85. virtual void ShellExecute(int nRow,LPCTSTR pszVerb=NULL);
  86. virtual void SetNotificationObject(bool bNotify);
  87. virtual BOOL Populate(LPTVITEMDATA lptvid,LPSHELLFOLDER psfFolder,bool bCallBack);
  88. virtual BOOL Populate(LPCTSTR pszPath, bool bCallBack=false);
  89. virtual BOOL Populate(LPTVITEMDATA lptvid);
  90. virtual void Refresh();
  91. virtual void StartPopulate();
  92. virtual void EndPopulate();
  93. // i need draw color item
  94. // Overridables
  95. protected:
  96. virtual void DestroyThreads();
  97. virtual void Load();
  98. virtual void SetColumnWidths();
  99. virtual void RemoveExt(LPTSTR pszFileName);
  100. virtual void InitColumns();
  101. virtual CString GetColumns();
  102. virtual BOOL InitImageLists();
  103. virtual BOOL InitItems(LPTVITEMDATA lptvid, bool bCallBack);
  104. virtual void InitShellSettings();
  105. virtual bool FilterItem(LPSHELLFOLDER pFolder,LPCITEMIDLIST pidl,UINT ulAttrs);
  106. virtual bool GetColText(int nCol,LPCITEMIDLIST pidlAbs,LPLVITEMDATA lplvid,CString &sText);
  107. virtual void GetText(PSLC_COLUMN_DATA pColData,LV_DISPINFO *pDispInfo,LPLVITEMDATA lplvid);
  108. virtual void GetFileDetails(LPCITEMIDLIST pidl, CString &sSize, CString &sDateTime);
  109. virtual void CreateFileChangeThread(HWND hwnd);
  110. virtual void FreeTVID();
  111. virtual void FreeInterface(IUnknown *pInterface);
  112. virtual bool UseShellColumns();
  113. virtual LPCTSTR GetFilterMask(LPCTSTR pszFilter,CString &sMask);
  114. private:
  115. void LoadFilterFiles(const CString &sFileFilter);
  116. // Overrides
  117. // ClassWizard generated virtual function overrides
  118. //{{AFX_VIRTUAL(CIEShellListCtrl)
  119. public:
  120. virtual void ChangeStyle(UINT &dwStyle);
  121. virtual void Init();
  122. protected:
  123. virtual void GoBack(int nRow);
  124. virtual void ShowPopupMenu(int nRow,int nCol,CPoint point);
  125. virtual BOOL OnEnter(NM_LISTVIEW* pNMListView);
  126. virtual BOOL DoubleClick(NM_LISTVIEW* pNMListView);
  127. virtual void PreSubclassWindow();
  128. virtual bool DragOver(CDD_OleDropTargetInfo *pInfo);
  129. virtual bool DragLeave(CDD_OleDropTargetInfo *pInfo);
  130. virtual bool DragEnter(CDD_OleDropTargetInfo *pInfo);
  131. virtual bool DragDrop(CDD_OleDropTargetInfo *pInfo);
  132. virtual BOOL GetDispInfo(LV_DISPINFO *pDispInfo);
  133. virtual PFNLVCOMPARE GetCompareFunc();
  134. virtual void AllItemsDeleted();
  135. virtual DROPEFFECT DoDragDrop(int *pnRows,COleDataSource *pOleDataSource);
  136. virtual bool EndLabelEdit(int nRow,int nCol,LPCTSTR pszText);
  137. //}}AFX_VIRTUAL
  138. // Implementation
  139. public:
  140. void * GetIdleFuncAddr();
  141. BOOL __cdecl OnIdle( LONG lCount );
  142. void SetTreeCtrlWnd(HWND hWnd);
  143. virtual ~CIEShellListCtrl();
  144. // Generated message map functions
  145. protected:
  146. virtual void SelChanged(int nItem , LRESULT * pResult);
  147. //{{AFX_MSG(CIEShellListCtrl)
  148. // NOTE - the ClassWizard will add and remove member functions here.
  149. afx_msg void OnDestroy();
  150. afx_msg void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
  151. afx_msg LRESULT OnAppFileChangeNewPath(WPARAM wParam, LPARAM lParam);
  152. afx_msg LRESULT OnAppFileChangeEvent(WPARAM wParam, LPARAM lParam);
  153. afx_msg LRESULT OnAppUpdateAllViews(WPARAM wParam, LPARAM lParam );
  154. afx_msg LRESULT OnSettingChange(WPARAM wParam,LPARAM lParam);
  155. afx_msg LRESULT OnSetmessagestring(WPARAM wParam, LPARAM lParam );
  156. //}}AFX_MSG
  157. afx_msg LRESULT OnAppDeleteKey(WPARAM wParam, LPARAM lParam);
  158. afx_msg LRESULT OnAppPropertiesKey(WPARAM wParam, LPARAM lParam);
  159. DECLARE_MESSAGE_MAP()
  160. private:
  161. static UINT ThreadFunc (LPVOID pParam);
  162. enum { MAX_THREADS=1 };
  163. int m_iProcessed;
  164. HWND m_hTreeWnd;
  165. vecListItemData m_vecItemData;
  166. CShellPidl m_ShellPidl;
  167. TVITEMDATA m_tvid;
  168. LPSHELLFOLDER m_psfSubFolder;
  169. LPITEMIDLIST m_pidlInternet;
  170. IMalloc *m_pMalloc;
  171. HANDLE m_hThreads[MAX_THREADS];
  172. CWinThread *m_pThreads[MAX_THREADS];
  173. CEvent m_event[MAX_THREADS];
  174. CEvent m_MonitorEvent[MAX_THREADS];
  175. CString m_sMonitorPath;
  176. CIEShellDragDrop m_ShellDragDrop;
  177. CShellDetails m_ShellDetails;
  178. CShellSettings m_ShellSettings;
  179. CString m_sColumns;
  180. CString m_sFileFilter;
  181. CStringList m_FilterLookup;
  182. CStringList m_ExcludedLookup;
  183. int m_nThreadCount;
  184. bool m_bCallBack;
  185. bool m_bNoExt;
  186. bool m_bRefreshAllowed;
  187. bool m_bPopulateInit;
  188. bool m_bInitiliazed;
  189. bool m_bNotifyParent;
  190. };
  191. /////////////////////////////////////////////////////////////////////////////
  192. typedef struct FC_THREADINFO
  193. {
  194.     HANDLE hEvent;
  195. HANDLE hMonitorEvent;
  196.     CIEShellListCtrl *pListCtrl;
  197. } FC_THREADINFO, *PFC_THREADINFO;
  198. inline const CShellSettings &CIEShellListCtrl::GetShellSettings() const
  199. {
  200. return m_ShellSettings;
  201. }
  202. inline CShellSettings &CIEShellListCtrl::GetShellSettings()
  203. {
  204. return m_ShellSettings;
  205. }
  206. //{{AFX_INSERT_LOCATION}}
  207. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  208. #endif //__IESHELLLISTCTRL_H__