XTShellListBase.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:14k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTShellListBase.h : header file
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #ifndef __XTSHELLLISTBASE_H__
  22. #define __XTSHELLLISTBASE_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. class CXTDirWatcher;
  28. //===========================================================================
  29. // Summary:
  30. //     CXTShellListBase is a multiple inheritance class derived from CXTListView
  31. //     and CXTShellPidl. It is used to create a CXTShellListBase class object.
  32. //===========================================================================
  33. class _XTP_EXT_CLASS CXTShellListBase : public CXTListBase, public CXTShellPidl
  34. {
  35. public:
  36. //-----------------------------------------------------------------------
  37. // Summary:
  38. //     Constructs a CXTShellListBase object
  39. //-----------------------------------------------------------------------
  40. CXTShellListBase();
  41. //-----------------------------------------------------------------------
  42. // Summary:
  43. //     Destroys a CXTShellListBase object, handles cleanup and deallocation
  44. //-----------------------------------------------------------------------
  45. virtual ~CXTShellListBase();
  46. public:
  47. //-----------------------------------------------------------------------
  48. // Summary:
  49. //     Call this member function to enable or disable the display of the
  50. //     shell context menu on the right click of the item.
  51. // Parameters:
  52. //     bEnable - TRUE to display a context menu.
  53. //-----------------------------------------------------------------------
  54. virtual void EnableContextMenu(BOOL bEnable);
  55. //-----------------------------------------------------------------------
  56. // Summary:
  57. //     Call this member function to determine the type of items included
  58. //     in the shell enumeration. The default is SHCONTF_FOLDERS | SHCONTF_NONFOLDERS.
  59. // Parameters:
  60. //     uFlags - Determines the type of items included in an enumeration and can
  61. //              be one or more of the flags listed in the Remarks section.
  62. // Remarks:
  63. //     Styles to be added or removed can be combined by using the bitwise
  64. //     OR (|) operator. It can be one or more of the following:<p/>
  65. //     * <b>SHCONTF_FOLDERS</b> Include items that are folders in
  66. //       the enumeration.
  67. //     * <b>SHCONTF_NONFOLDERS</b> Include items that are not folders
  68. //       in the enumeration.
  69. //     * <b>SHCONTF_INCLUDEHIDDEN</b> Include hidden items in the
  70. //       enumeration.
  71. //     * <b>SHCONTF_INIT_ON_FIRST_NEXT</b> IShellFolder::EnumObjects
  72. //       can return without validating the enumeration object. Validation
  73. //       can be postponed until the first call to IEnumIDList::Next.
  74. //       This flag is intended to be used when a user interface may be
  75. //       displayed prior to the first IEnumIDList::Next call. For a
  76. //       user interface to be presented, 'hwndOwner' must be set to a valid
  77. //       window handle.
  78. //     * <b>SHCONTF_NETPRINTERSRCH</b> The caller is looking for
  79. //       printer objects.
  80. //-----------------------------------------------------------------------
  81. virtual void SetEnumFlags(UINT uFlags);
  82. //-----------------------------------------------------------------------
  83. // Summary:
  84. //     This member function associates the system image list with the list
  85. //     control.
  86. // Returns:
  87. //     TRUE if successful, otherwise returns FALSE.
  88. //-----------------------------------------------------------------------
  89. virtual BOOL InitSystemImageLists();
  90. //-----------------------------------------------------------------------
  91. // Summary:
  92. //     This member function populates the list view control.
  93. // Parameters:
  94. //     lptvid - Pointer to TreeView item data.
  95. //     lpsf   - Pointer to the parent shell folder.
  96. // Returns:
  97. //     TRUE if successful, otherwise returns FALSE.
  98. //-----------------------------------------------------------------------
  99. virtual BOOL PopulateListView(XT_TVITEMDATA* lptvid, LPSHELLFOLDER lpsf);
  100. //-----------------------------------------------------------------------
  101. // Summary:
  102. //     This member function returns the index of the list view item that
  103. //     was double clicked on.
  104. // Returns:
  105. //     The index of the item that was double clicked; or -1, if the item
  106. //     was not found.
  107. //-----------------------------------------------------------------------
  108. virtual int GetDoubleClickedItem();
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     This member function displays the system popup menu for the selected
  112. //     item or folder.
  113. // Parameters:
  114. //     pos - Position to show
  115. //-----------------------------------------------------------------------
  116. virtual void ShowShellContextMenu(CPoint pos);
  117. //-----------------------------------------------------------------------
  118. // Summary:
  119. //     This member function executes the item clicked on
  120. //     in the list control via the Shell.
  121. // Parameters:
  122. //     iItem - Index of the list view item clicked on.
  123. //     lplvid - Pointer to the list view item data.
  124. // Returns:
  125. //     true if successful, otherwise returns false.
  126. //-----------------------------------------------------------------------
  127. virtual bool ShellOpenItem(int iItem);
  128. virtual bool ShellOpenItem(XT_LVITEMDATA* lplvid); // <combine CXTShellListBase::ShellOpenItem@int>
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     This member function retrieves the path for the specified list view
  132. //     item.
  133. // Parameters:
  134. //     iItem       - Index of the list view item to get the path of.
  135. //     strItemPath - Reference to a CString object that receives the path string.
  136. // Returns:
  137. //     TRUE if successful, otherwise returns FALSE.
  138. //-----------------------------------------------------------------------
  139. virtual BOOL GetItemPath(int iItem, CString& strItemPath);
  140. //-----------------------------------------------------------------------
  141. // Summary:
  142. //     This member function creates default columns for the list view
  143. //-----------------------------------------------------------------------
  144. virtual void BuildDefaultColumns();
  145. //-----------------------------------------------------------------------
  146. // Summary:
  147. //     Override this member function in your derived class to perform custom
  148. //     sort routines.
  149. // Parameters:
  150. //     nCol        - Passed in from the control. The index of the column clicked.
  151. //     bAscending  - Passed in from the control. true if the sort order should be ascending.
  152. // Returns:
  153. //     true if successful, otherwise returns false.
  154. //-----------------------------------------------------------------------
  155. virtual bool SortList(int nCol, bool bAscending);
  156. //-----------------------------------------------------------------------
  157. // Summary:
  158. //     Used by the shell list control to handle a drag drop event.
  159. // Parameters:
  160. //     pNMListView - Points to a NM_LISTVIEW structure.
  161. //-----------------------------------------------------------------------
  162. virtual void OnDragDrop(NM_LISTVIEW* pNMListView);
  163. //-----------------------------------------------------------------------
  164. // Summary:
  165. //     Called by the shell list control to insert commas into the specified
  166. //     numeric value. The result is then returned in the szBufferOut item. An
  167. //     example of this would be to format a file size 1, 024 KB.
  168. // Parameters:
  169. //     value    - [in] Numeric value to insert commas.
  170. //     szBuffer - [out] String buffer to receive the formatted string.
  171. //     nSize    - [in] Size of the string specified by szBuffer.
  172. // Returns:
  173. //     A string representing a comma separated numeric value.
  174. //-----------------------------------------------------------------------
  175. virtual TCHAR* InsertCommas(LONGLONG value, TCHAR* szBuffer, UINT nSize);
  176. //-------------------------------------------------------------------------
  177. // Summary:
  178. //     Call this member function to define a file filter for the files
  179. //     displayed, only those files specified by pFilters to be displayed
  180. //     in the shell list. File extensions are separated by a semi-colon.
  181. //     Call SetIncludeExtensions(NULL); to restore normal file display.
  182. // Parameters:
  183. //      lpszFilters - NULL terminated string representing files to be displayed
  184. //                    in the shell list control.
  185. // Example:
  186. // <code>
  187. // SetIncludeExtensions(_T("*.wav;*.mp3;*.aif;*.wmv"));
  188. // </code>
  189. //-------------------------------------------------------------------------
  190. virtual void SetIncludeExtensions(LPCTSTR lpszFilters = NULL);
  191. protected:
  192. //-----------------------------------------------------------------------
  193. // Summary:
  194. //     This member function is called by the CXTShellListBase class to
  195. //     perform initialization when the window is created or sub-classed.
  196. // Returns:
  197. //     TRUE if the window was successfully initialized, otherwise FALSE.
  198. //-----------------------------------------------------------------------
  199. virtual bool Init();
  200. //-----------------------------------------------------------------------
  201. // Summary:
  202. //     This member function adds items to the list view.
  203. // Parameters:
  204. //     lptvid - Pointer to tree view item data.
  205. //     lpsf   - Pointer to the parent shell folder.
  206. // Returns:
  207. //     TRUE if successful, otherwise returns FALSE.
  208. //-----------------------------------------------------------------------
  209. virtual BOOL InitListViewItems(XT_TVITEMDATA* lptvid, LPSHELLFOLDER lpsf);
  210. //-----------------------------------------------------------------------
  211. // Summary:
  212. //     This member function gets the index for the normal and selected
  213. //     icons of the current item.
  214. // Parameters:
  215. //     lpifq    - Fully qualified item ID list for the current item.
  216. //     lptvitem - Pointer to the tree view item that is about to be added to the tree.
  217. //-----------------------------------------------------------------------
  218. virtual void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTV_ITEM lptvitem);
  219. //-----------------------------------------------------------------------
  220. // Summary:
  221. //     This member function sets the shell attribute flags for the specified
  222. //     list item.
  223. // Parameters:
  224. //     iItem        - Index of the item to set the attributes for.
  225. //     dwAttributes - Flags retrieved from SHELLFOLDER::GetAttributesOf.
  226. //-----------------------------------------------------------------------
  227. virtual void SetAttributes(int iItem, DWORD dwAttributes);
  228. //-----------------------------------------------------------------------
  229. // Summary:
  230. //     This member function returns if item is filtered. You can override it in your
  231. //     class
  232. // Parameters:
  233. //     lpszItemName  - Friendly name for the folder or file.
  234. //     ulItemAttrs   - Attributes of the item.
  235. //-----------------------------------------------------------------------
  236. virtual BOOL IsItemFiltered(LPCTSTR lpszItemName, ULONG ulItemAttrs);
  237. protected:
  238. //{{AFX_CODEJOCK_PRIVATE
  239. //{{AFX_VIRTUAL(CXTShellListBase)
  240. virtual void UpdateList(int nMessage, XT_TVITEMDATA* pItemData);
  241. //}}AFX_VIRTUAL
  242. //{{AFX_MSG(CXTShellListBase)
  243. afx_msg void OnDeleteListItem(NMHDR* pNMHDR, LRESULT* pResult);
  244. //}}AFX_MSG
  245. //}}AFX_CODEJOCK_PRIVATE
  246. protected:
  247. int              m_nNameColumnWidth; // Size in pixels for the name column width.
  248. UINT             m_uFlags;           // Flags indicating which items to include in the enumeration.
  249. BOOL             m_bContextMenu;     // TRUE to display the shell context menu on right item click.
  250. LPITEMIDLIST     m_pidlINet;         // Points to the CSIDL_INTERNET folder location.
  251. CString          m_csIncludeEXT;     // Comma delimited string of extensions to include in file display.
  252. CXTDirWatcher*   m_pDirThread;       // Thread used to monitor directory activity.
  253. CXTShellSettings m_shSettings;       // Contains SHELLFLAGSTATE info.
  254. LPSHELLFOLDER    m_lpsfFolder;
  255. };
  256. //////////////////////////////////////////////////////////////////////
  257. AFX_INLINE void CXTShellListBase::SetEnumFlags(UINT uFlags) {
  258. m_uFlags = uFlags;
  259. }
  260. AFX_INLINE void CXTShellListBase::EnableContextMenu(BOOL bEnable) {
  261. m_bContextMenu = bEnable;
  262. }
  263. AFX_INLINE void CXTShellListBase::SetIncludeExtensions(LPCTSTR lpszFilters) {
  264. m_csIncludeEXT = lpszFilters;
  265. }
  266. //{{AFX_CODEJOCK_PRIVATE
  267. #define DECLATE_SHELLLIST_BASE(ClassName, List, Base)
  268. DECLATE_LIST_BASE(Base##List, List, Base)
  269. class _XTP_EXT_CLASS ClassName : public Base##List
  270. {
  271. protected:  
  272. void OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult) {
  273. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  274. OnDragDrop(pNMListView);    
  275. *pResult = 0;
  276. }   
  277. void OnDeleteListItem(NMHDR* pNMHDR, LRESULT* pResult) {
  278. Base::OnDeleteListItem(pNMHDR, pResult);
  279. }   
  280. void OnContextMenu(CWnd* pWnd, CPoint pos) {
  281. if (m_bContextMenu) ShowShellContextMenu(pos);
  282. else List::OnContextMenu(pWnd, pos);
  283. };
  284. #define ON_SHELLLIST_REFLECT
  285. ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
  286. ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBeginDrag)
  287. ON_NOTIFY_REFLECT(LVN_BEGINRDRAG, OnBeginDrag)
  288. ON_NOTIFY_REFLECT(LVN_DELETEITEM, OnDeleteListItem)
  289. ON_WM_CONTEXTMENU()
  290. ON_LISTCTRL_REFLECT
  291. #endif // __XTSHELLLISTBASE_H__
  292. //}}AFX_CODEJOCK_PRIVATE