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

对话框与窗口

开发平台:

Visual C++

  1. // XTTreeBase.h interface for the CXTTreeBase class.
  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. #if !defined(__XTTREEBASE_H__)
  22. #define __XTTREEBASE_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //===========================================================================
  28. // Summary:
  29. //     CXTTreeBase is a CTreeView derived class. It extends the CTreeView
  30. //     class to add additional functionality, including tree traversal, searching,
  31. //     color, and settings.
  32. //===========================================================================
  33. class _XTP_EXT_CLASS CXTTreeBase
  34. {
  35. protected:
  36. // ----------------------------------------------------------------------
  37. // Summary:
  38. //     CLRFONT structure is used to by the CXTShellTreeCtrl and
  39. //     CXTShellTreeView class to maintain font information for a
  40. //     particular tree item.
  41. // See Also:
  42. //     CXTShellTreeCtrl, CXTShellTreeView
  43. // ----------------------------------------------------------------------
  44. struct CLRFONT
  45. {
  46. // ----------------------------------------------------------------------
  47. // Summary: Constructs a CLRFONT struct and initializes member data.
  48. // ----------------------------------------------------------------------
  49. CLRFONT();
  50. LOGFONT  logfont;   // A LOGFONT object that represents the tree item font.
  51. COLORREF color;     // An RGB value that represents the text color for a tree item.
  52. COLORREF colorBack; // An RGB value that represents the background color for a tree item.
  53. };
  54. // ----------------------------------------------------------------------
  55. // Summary:
  56. //     Map for maintaining HTREEITEM to CLRFONT structure relationships.
  57. // Remarks:
  58. //     CMap definition used by the CXTTreeBase class to maintain
  59. //     a list of HTREEITEM to CLRFONT structure relationships representing
  60. //     tree item that has user defined color information.
  61. // See Also:
  62. //     CXTTreeBase, CLRFONT
  63. // ----------------------------------------------------------------------
  64. typedef CMap<void*, void*, CLRFONT, CLRFONT&> CColorFontMap;
  65. protected:
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Protected constructor used by dynamic creation. Constructs a CXTTreeBase
  69. //     object
  70. //-----------------------------------------------------------------------
  71. CXTTreeBase();
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //     Destroys a CXTTreeBase object, handles cleanup and deallocation
  75. //-----------------------------------------------------------------------
  76. virtual ~CXTTreeBase();
  77. public:
  78. //-----------------------------------------------------------------------
  79. // Summary:
  80. //     This member function will retrieve the tree view item that has the
  81. //     specified relationship, indicated by the 'nCode' parameter, to 'hItem'.
  82. // Parameters:
  83. //     hItem -  Handle of a tree item.
  84. //     nCode - A flag indicating the type of relation to 'hItem'. This flag can be
  85. //             one of the values listed in the Remarks section.
  86. // Remarks:
  87. //     nCode can be one of the following values:
  88. //     * <b>TVGN_CARET</b> Retrieves the currently selected item.
  89. //     * <b>TVGN_CHILD</b> Retrieves the first child item. The 'hItem'
  90. //       parameter must be NULL.
  91. //     * <b>TVGN_DROPHILITE</b> Retrieves the item that is the target
  92. //       of a drag-and-drop operation.
  93. //     * <b>TVGN_FIRSTVISIBLE</b> Retrieves the first visible item.
  94. //     * <b>TVGN_NEXT</b> Retrieves the next sibling item.
  95. //     * <b>TVGN_NEXTVISIBLE</b> Retrieves the next visible item
  96. //        that follows the specified item.
  97. //     * <b>TVGN_PARENT</b> Retrieves the parent of the specified
  98. //       item.
  99. //     * <b>TVGN_PREVIOUS</b> Retrieves the previous sibling item.
  100. //     * <b>TVGN_PREVIOUSVISIBLE</b> Retrieves the first visible
  101. //       item that precedes the specified item.
  102. //     * <b>TVGN_ROOT</b> Retrieves the first child item of the
  103. //       root item of which the specified item is a part.
  104. //
  105. //  The Non nCode version gets the next item as if the outline was completely
  106. //     expanded.
  107. // Returns:
  108. //     The handle of the next item if successful, otherwise returns
  109. //     NULL.
  110. //-----------------------------------------------------------------------
  111. virtual HTREEITEM GetNextItem(HTREEITEM hItem) const;
  112. virtual HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const; // <combine CXTTreeBase::GetNextItem@HTREEITEM@const>
  113. //-----------------------------------------------------------------------
  114. // Summary:
  115. //     This member function gets the previous item as if the outline was
  116. //     completely expanded.
  117. // Parameters:
  118. //     hItem - Handle of the reference item.
  119. // Returns:
  120. //     The handle of the item immediately above the reference item.
  121. //-----------------------------------------------------------------------
  122. virtual HTREEITEM GetPrevItem(HTREEITEM hItem) const;
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     This member function retrieves the last item in the branch.
  126. // Parameters:
  127. //     hItem - Node identifying the branch. NULL will return the last item in the
  128. //             outline.
  129. // Returns:
  130. //     The handle of the last item.
  131. //-----------------------------------------------------------------------
  132. virtual HTREEITEM GetLastItem(HTREEITEM hItem) const;
  133. //-----------------------------------------------------------------------
  134. // Summary:
  135. //     This member function searches the entire tree for an item label
  136. //     that contains the search string.
  137. // Parameters:
  138. //     lpszSearch     - String to search for.
  139. //     bCaseSensitive - TRUE if the search should be case sensitive.
  140. //     bDownDir       - TRUE for down.
  141. //     bWholeWord     - TRUE if search should match whole words.
  142. //     hItem          - Handle of the tree item to start searching from, NULL to use
  143. //     the currently selected tree item.
  144. // Returns:
  145. //     The handle to the item, or returns NULL.
  146. // See Also:
  147. //     IsFindValid
  148. //-----------------------------------------------------------------------
  149. virtual HTREEITEM FindItem(LPCTSTR lpszSearch, BOOL bCaseSensitive = FALSE, BOOL bDownDir = TRUE, BOOL bWholeWord = FALSE, HTREEITEM hItem = NULL);
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //     This member function searches the entire branch specified by htiItem for an item label
  153. //     that contains the search string.
  154. // Parameters:
  155. //     lpszSearch     - String to search for.
  156. //     bCaseSensitive - TRUE if the search should be case sensitive.
  157. //     bWholeWord     - TRUE if search should match whole words.
  158. //     htiItem        - Handle of the tree item to start searching from, NULL to use
  159. //                      the currently selected tree item.
  160. // Returns:
  161. //     The handle to the item, or returns NULL.
  162. // See Also:
  163. //     IsFindValid
  164. //-----------------------------------------------------------------------
  165. virtual HTREEITEM FindItemInBranch(LPCTSTR lpszSearch, BOOL bCaseSensitive /*= FALSE*/, BOOL bWholeWord /*= FALSE*/, HTREEITEM htiItem /*= NULL*/);
  166. //-----------------------------------------------------------------------
  167. // Summary:
  168. //     This member function sets the font for the reference tree item.
  169. // Parameters:
  170. //     hItem   - Handle of the reference item.
  171. //     logfont - New font for the tree item.
  172. //-----------------------------------------------------------------------
  173. virtual void SetItemFont(HTREEITEM hItem, LOGFONT& logfont);
  174. //-----------------------------------------------------------------------
  175. // Summary:
  176. //     This member function retrieves the current LOGFONT font used by
  177. //     the tree item.
  178. // Parameters:
  179. //     hItem    - Handle of the reference item.
  180. //     plogfont - Pointer to receive LOGFONT information.
  181. // Returns:
  182. //     TRUE if successful, otherwise returns FALSE.
  183. //-----------------------------------------------------------------------
  184. virtual BOOL GetItemFont(HTREEITEM hItem, LOGFONT* plogfont);
  185. //-----------------------------------------------------------------------
  186. // Summary:
  187. //     This member function sets the reference tree item font to bold.
  188. // Parameters:
  189. //     hItem - Handle of the reference item.
  190. //     bBold - TRUE for bold font.
  191. //-----------------------------------------------------------------------
  192. virtual void SetItemBold(HTREEITEM hItem, BOOL bBold = TRUE);
  193. //-----------------------------------------------------------------------
  194. // Summary:
  195. //     This member function checks whether or not the tree item has a bold font.
  196. // Parameters:
  197. //     hItem - Handle of the reference item.
  198. // Returns:
  199. //     TRUE if the tree item has a bold font, otherwise returns FALSE.
  200. //-----------------------------------------------------------------------
  201. virtual BOOL GetItemBold(HTREEITEM hItem);
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     This member function sets the tree item text color.
  205. // Parameters:
  206. //     hItem - Handle of the reference item.
  207. //     color - RGB value for the tree item's text.
  208. //-----------------------------------------------------------------------
  209. virtual void SetItemColor(HTREEITEM hItem, COLORREF color);
  210. //-----------------------------------------------------------------------
  211. // Summary:
  212. //     This member function sets the tree item background color.
  213. // Parameters:
  214. //     hItem - Handle of the reference item.
  215. //     color - RGB value for the tree item's text.
  216. //-----------------------------------------------------------------------
  217. virtual void SetItemBackColor(HTREEITEM hItem, COLORREF color);
  218. //-----------------------------------------------------------------------
  219. // Summary:
  220. //     This member function returns the RGB value for the specified
  221. //     tree item text color or (COLORREF)-1, if color was not set.
  222. // Parameters:
  223. //     hItem - Handle of the reference item.
  224. // Returns:
  225. //     The RGB value for the specified tree item text color, or (COLORREF)-1, if the
  226. //     color was not set.
  227. //-----------------------------------------------------------------------
  228. virtual COLORREF GetItemColor(HTREEITEM hItem);
  229. //-----------------------------------------------------------------------
  230. // Summary:
  231. //     This member function returns the RGB value for the specified
  232. //     tree item background color or (COLORREF)-1, if color was not set.
  233. // Parameters:
  234. //     hItem - Handle of the reference item.
  235. // Returns:
  236. //     The RGB value for the specified tree item background color, or (COLORREF)-1, if the
  237. //     color was not set.
  238. //-----------------------------------------------------------------------
  239. virtual COLORREF GetItemBackColor(HTREEITEM hItem);
  240. //-----------------------------------------------------------------------
  241. // Summary:
  242. //     This member function enables or disables multi-selection for the
  243. //     tree control.
  244. // Parameters:
  245. //     bMultiSelect - TRUE for a multi-selection tree control.
  246. // Returns:
  247. //     TRUE if successful, otherwise returns FALSE.
  248. //-----------------------------------------------------------------------
  249. virtual BOOL EnableMultiSelect(BOOL bMultiSelect = TRUE);
  250. //-----------------------------------------------------------------------
  251. // Summary:
  252. //     This member function returns the previously selected tree item in
  253. //     a multi-selection tree control.
  254. // Parameters:
  255. //     hItem - Handle of the reference item.
  256. // Returns:
  257. //     A handle to the previously selected tree item.
  258. //-----------------------------------------------------------------------
  259. virtual HTREEITEM GetPrevSelectedItem(HTREEITEM hItem) const;
  260. //-----------------------------------------------------------------------
  261. // Summary:
  262. //     This member function returns the next selected item in a multi-selection
  263. //     tree control.
  264. // Parameters:
  265. //     hItem - Handle of the reference item.
  266. // Returns:
  267. //     A handle to the next selected tree item.
  268. //-----------------------------------------------------------------------
  269. HTREEITEM GetNextSelectedItem(HTREEITEM hItem) const;
  270. //-----------------------------------------------------------------------
  271. // Summary:
  272. //     This member function returns the first selected item in a multi-selection
  273. //     tree control.
  274. // Returns:
  275. //     A handle to the first selected tree item.
  276. //-----------------------------------------------------------------------
  277. HTREEITEM GetFirstSelectedItem() const;
  278. //-----------------------------------------------------------------------
  279. // Summary:
  280. //     This member function returns the number of tree items that are selected.
  281. // Returns:
  282. //     A UNIT value that represents the number of tree items selected.
  283. //-----------------------------------------------------------------------
  284. UINT GetSelectedCount() const;
  285. // --------------------------------------------------------------------------
  286. // Summary:
  287. //     This member function is a replacement for the base class function
  288. //     of the same name, to handle TVIS_FOCUSED in a multi-select
  289. //     tree control. It sets the state of the item specified by <i>hItem</i>.
  290. // Parameters:
  291. //     hItem -       Handle of the item whose state is to be set.
  292. //     nState -      Specifies the new states for the item.
  293. //     nStateMask -  Specifies which states are to be changed.
  294. // Returns:
  295. //     Nonzero if successful, otherwise returns zero.
  296. // Remarks:
  297. //     The TVIS_FOCUSED state flag when set will draw a focus
  298. //     rectangle around the tree item that currently has input focus.
  299. //     Only one tree item can have focus at any given time. For a list of
  300. //     possible item state flags, see Tree-View Control Item States in
  301. //     the MSDN documentation.
  302. // --------------------------------------------------------------------------
  303. BOOL SetItemState(HTREEITEM hItem, UINT nState, UINT nStateMask);
  304. //-----------------------------------------------------------------------
  305. // Summary:
  306. //     This member function is a replacement for the base class function of
  307. //     the same name to handle TVIS_FOCUSED in a multi-select tree control.
  308. // Parameters:
  309. //     hItem      - Handle of the item whose state is to be retrieved.
  310. //     nStateMask - Mask indicating which states are to be retrieved. For more information
  311. //                  on possible values for 'nStateMask', see the discussion of the 'state'
  312. //                  and 'stateMask' members of the TVITEM structure in the Platform SDK.
  313. // Returns:
  314. //     The state of the item specified by 'hItem'.
  315. //-----------------------------------------------------------------------
  316. UINT GetItemState(HTREEITEM hItem, UINT nStateMask) const;
  317. //-----------------------------------------------------------------------
  318. // Summary:
  319. //     This member function is a replacement for the base class function of
  320. //     the same name, to handle TVIS_FOCUSED in a multi-select tree control.
  321. //     Call this function to select the given tree view item. If 'hItem' is
  322. //     NULL, then no items are selected.
  323. // Parameters:
  324. //     hItem - Handle of a tree item.
  325. // Returns:
  326. //     Nonzero if successful, otherwise returns zero.
  327. //-----------------------------------------------------------------------
  328. BOOL SelectItem(HTREEITEM hItem);
  329. //-----------------------------------------------------------------------
  330. // Summary:
  331. //     This member function returns the handle to the tree item that currently
  332. //     has focus.
  333. // Returns:
  334. //     The handle of the item that has focus, otherwise returns NULL.
  335. //-----------------------------------------------------------------------
  336. HTREEITEM GetFocusedItem() const;
  337. //-----------------------------------------------------------------------
  338. // Summary:
  339. //     This member function will set the focus for the tree item specified
  340. //     by 'hItem'.
  341. // Parameters:
  342. //     hItem - Handle of a tree item.
  343. // Returns:
  344. //     TRUE if successful, otherwise returns FALSE.
  345. //-----------------------------------------------------------------------
  346. BOOL FocusItem(HTREEITEM hItem);
  347. //-----------------------------------------------------------------------
  348. // Summary:
  349. //     Call this member function to clear, or select, all of the visible items
  350. //     in the tree control. This will not effect the focus of the tree items.
  351. // Parameters:
  352. //     bSelect - TRUE to select all the items, or FALSE to clear the selection.
  353. //     htItem  - Tree item to start selection from. If NULL selection will begin at the root.
  354. //-----------------------------------------------------------------------
  355. void SelectAll(BOOL bSelect = TRUE, HTREEITEM htItem = NULL);
  356. //-----------------------------------------------------------------------
  357. // Summary:
  358. //     This member function selects items from 'hItemFrom' to 'hItemTo' in
  359. //     a multi-selection tree control. It does not select a child item if
  360. //     the parent is collapsed. It will remove the selection from all other
  361. //     items if 'bOnly' is set to TRUE.
  362. // Parameters:
  363. //     hItemFrom - Handle of the item to start selecting from.
  364. //     hItemTo   - Handle of the item to end selection at.
  365. //     bOnly     - TRUE to only select the specified range, or FALSE to keep existing
  366. //                 selections.
  367. //-----------------------------------------------------------------------
  368. void SelectItems(HTREEITEM hItemFrom, HTREEITEM hItemTo, BOOL bOnly = TRUE);
  369. //-----------------------------------------------------------------------
  370. // Summary:
  371. //     This member function checks whether or not the specified item is selected.
  372. // Parameters:
  373. //     hItem - Handle of a tree item.
  374. // Returns:
  375. //     TRUE if the specified item is selected, otherwise returns FALSE.
  376. //-----------------------------------------------------------------------
  377. BOOL IsSelected(HTREEITEM hItem) const;
  378. //-----------------------------------------------------------------------
  379. // Summary:
  380. //     This member function will cause all of the children of the specified
  381. //     tree item to be selected or deselected.
  382. // Parameters:
  383. //     hParent  - Handle of tree item to begin selection from.
  384. //     bSelect  - TRUE to select only the child items or FALSE to keep existing selections.
  385. //     bRecurse - TRUE to recurse all siblings or FALSE to select only children of the
  386. //                parent item.
  387. // Returns:
  388. //     TRUE if focus was on a child item, otherwise returns FALSE.
  389. //-----------------------------------------------------------------------
  390. BOOL SelectChildren(HTREEITEM hParent, BOOL bSelect = TRUE, BOOL bRecurse = TRUE);
  391. //-----------------------------------------------------------------------
  392. // Summary:
  393. //     This member function will retrieve a reference to the typed pointer
  394. //     array that contains the items selected in the tree control.
  395. // Parameters:
  396. //     list - Reference to a CTypedPtrList<CPtrList, HTREEITEM> object.
  397. //-----------------------------------------------------------------------
  398. void GetSelectedList(CTypedPtrList<CPtrList, HTREEITEM>& list) const;
  399. //-----------------------------------------------------------------------
  400. // Summary:
  401. //     This member function checks to see if the tree control is a multi-select
  402. //     tree.
  403. // Returns:
  404. //     TRUE if the tree control is a multi-select tree, otherwise returns FALSE.
  405. //-----------------------------------------------------------------------
  406. BOOL IsMultiSelect() const;
  407. //-----------------------------------------------------------------------
  408. // Summary:
  409. //     This member function sets the banding mode for a multi-selection tree
  410. //     control. If 'bLabel' is TRUE, then items are selected only when the
  411. //     banding rect passes over the tree item label. If FALSE, passing
  412. //     over any part of the tree item will cause selection to be made when
  413. //     the banding rect passes over it.
  414. // Parameters:
  415. //     bLabel - TRUE to select items only when banding rect passes over the text label,
  416. //              or FALSE to select items when banding rect passes over any part of
  417. //              the tree item.
  418. // Returns:
  419. //     The previous banding state.
  420. //-----------------------------------------------------------------------
  421. BOOL SetBandingHit(BOOL bLabel);
  422. protected:
  423. //-----------------------------------------------------------------------
  424. // Summary:
  425. //     This member function is called by the CXTTreeBase class to
  426. //     perform initialization when the window is created or sub-classed.
  427. // Returns:
  428. //     TRUE if the window was successfully initialized, otherwise FALSE.
  429. //-----------------------------------------------------------------------
  430. virtual bool Init();
  431. //-----------------------------------------------------------------------
  432. // Summary:
  433. //     Sends a WM_NOTIFY message to the tree control owner window.
  434. // Parameters:
  435. //     pNMHDR - Pointer to an NMHDR structure that contains the notification
  436. //              code and additional information. For some notification messages,
  437. //              this parameter points to a larger structure that has the NMHDR
  438. //              structure as its first member.
  439. // Remarks:
  440. //     Called by the tree control to package and send a WM_NOTIFY message
  441. //     to the tree control's owner window. You can override this member
  442. //     to provide additional functionality.
  443. // Returns:
  444. //     The return value is ignored except for notification messages that
  445. //     specify otherwise.
  446. //-----------------------------------------------------------------------
  447. virtual LRESULT SendNotify(LPNMHDR pNMHDR);
  448. //-----------------------------------------------------------------------
  449. // Summary:
  450. //     Toggles selection for all items in a multiple selection tree control.
  451. // Parameters:
  452. //     bSelect - TRUE to select, FALSE to remove selection.
  453. //     hIgnore - Handle to a tree item to skip while performing the operation.
  454. // Remarks:
  455. //     Called to toggle selection for all items in a multiple selection
  456. //     tree control. You can override this member to provide additional
  457. //     functionality.
  458. //-----------------------------------------------------------------------
  459. virtual void SelectAllIgnore(BOOL bSelect, HTREEITEM hIgnore);
  460. //-----------------------------------------------------------------------
  461. // Summary:
  462. //     Called when a mouse button click event occurs.
  463. // Parameters:
  464. //     bLeft  - TRUE if the left mouse button is down.
  465. //     nFlags - Indicates whether various virtual keys are down. See Remarks
  466. //              section for a list of values.
  467. //     point  - xy cursor location.
  468. // Remarks:
  469. //     <i>nFlags, /i> can be any combination of the following values:<p/>
  470. //     * <b>MK_CONTROL</b> Set if the CTRL key is down.
  471. //     * <b>MK_LBUTTON</b> Set if the left mouse button is down.
  472. //     * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
  473. //     * <b>MK_RBUTTON</b> Set if the right mouse button is down.
  474. //     * <b>MK_SHIFT</b>   Set if the SHIFT key is down.
  475. // Returns:
  476. //     TRUE if successful, otherwise FALSE.
  477. //-----------------------------------------------------------------------
  478. virtual BOOL OnButtonDown(BOOL bLeft, UINT nFlags, CPoint point);
  479. //-----------------------------------------------------------------------
  480. // Summary:
  481. //     Called during item selection in a multiple selection tree control.
  482. // Parameters:
  483. //     hItem  - Handle to the last item clicked that will receive focus.
  484. //     bLeft  - TRUE if the left mouse button is down.
  485. //     nFlags - Indicates whether various virtual keys are down. See Remarks
  486. //              section for a list of values.
  487. // Remarks:
  488. //     <i>nFlags, /i> can be any combination of the following values:<p/>
  489. //     * <b>MK_CONTROL</b> Set if the CTRL key is down.
  490. //     * <b>MK_LBUTTON</b> Set if the left mouse button is down.
  491. //     * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
  492. //     * <b>MK_RBUTTON</b> Set if the right mouse button is down.
  493. //     * <b>MK_SHIFT</b>   Set if the SHIFT key is down.
  494. //-----------------------------------------------------------------------
  495. virtual void DoPreSelection(HTREEITEM hItem, BOOL bLeft, UINT nFlags);
  496. //-----------------------------------------------------------------------
  497. // Summary:
  498. //     Called during item selection in a multiple selection tree control.
  499. // Parameters:
  500. //     hItem  - Handle to the last item clicked that will receive focus.
  501. //     bLeft  - TRUE if the left mouse button is down.
  502. //     nFlags - Indicates whether various virtual keys are down. See Remarks
  503. //              section for a list of values.
  504. //     point  - Mouse cursor position.
  505. // Remarks:
  506. //     <i>nFlags, /i> can be any combination of the following values:<p/>
  507. //     * <b>MK_CONTROL</b> Set if the CTRL key is down.
  508. //     * <b>MK_LBUTTON</b> Set if the left mouse button is down.
  509. //     * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
  510. //     * <b>MK_RBUTTON</b> Set if the right mouse button is down.
  511. //     * <b>MK_SHIFT</b>   Set if the SHIFT key is down.
  512. //-----------------------------------------------------------------------
  513. virtual void DoAction(HTREEITEM hItem, BOOL bLeft, UINT nFlags, CPoint point);
  514. //-----------------------------------------------------------------------
  515. // Summary:
  516. //     Draws a selection rectangle during item selection.
  517. // Parameters:
  518. //     point  - xy location of the mouse cursor.
  519. //     nFlags - Indicates whether various virtual keys are down. See Remarks
  520. //              section for a list of values.
  521. // Remarks:
  522. //     <i>nFlags, /i> can be any combination of the following values:<p/>
  523. //     * <b>MK_CONTROL</b> Set if the CTRL key is down.
  524. //     * <b>MK_LBUTTON</b> Set if the left mouse button is down.
  525. //     * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
  526. //     * <b>MK_RBUTTON</b> Set if the right mouse button is down.
  527. //     * <b>MK_SHIFT</b>   Set if the SHIFT key is down.
  528. //-----------------------------------------------------------------------
  529. virtual void DoBanding(UINT nFlags, CPoint point);
  530. //-----------------------------------------------------------------------
  531. // Summary:
  532. //     Updates tree item selection.
  533. // Parameters:
  534. //     pRect  - Cursor drag rectangle representing tree items to select.
  535. //     nFlags - Indicates whether various virtual keys are down. See Remarks
  536. //              section for a list of values.
  537. //     list   - An array of tree items that are currently selected.
  538. // Remarks:
  539. //     Called by the tree control to select tree items based upon the area
  540. //     specified by <i>pRect</i>.
  541. //     <i>nFlags, /i> can be any combination of the following values:<p/>
  542. //     * <b>MK_CONTROL</b> Set if the CTRL key is down.
  543. //     * <b>MK_LBUTTON</b> Set if the left mouse button is down.
  544. //     * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
  545. //     * <b>MK_RBUTTON</b> Set if the right mouse button is down.
  546. //     * <b>MK_SHIFT</b>   Set if the SHIFT key is down.
  547. //-----------------------------------------------------------------------
  548. virtual void UpdateSelectionForRect(LPCRECT pRect, UINT nFlags, CTypedPtrList<CPtrList, HTREEITEM>& list);
  549. //-----------------------------------------------------------------------
  550. // Summary:
  551. //     Member override to determine if a tree item is valid.
  552. // Parameters:
  553. //     hti - Handle to the tree item that was found when FindItem or
  554. //           FindItemInBranch has been called.
  555. // Remarks:
  556. //     Override this member function to determine if the tree item
  557. //     specified by <i>hti</i> is a valid. If IsFindValid returns
  558. //     FALSE the calling functions FindItem and FindItemInBranch
  559. //     will return NULL.
  560. // Returns:
  561. //     TRUE in the base class. Derived classes must return TRUE to
  562. //     indicate success and FALSE to indicate failure.
  563. //-----------------------------------------------------------------------
  564. virtual BOOL IsFindValid(HTREEITEM hti);
  565. //-----------------------------------------------------------------------
  566. // Summary:
  567. //     Called to render the tree control.
  568. // Parameters:
  569. //     dc        - Reference to the tree control device context.
  570. //     bInternal - FALSE to skip extended rendering tasks and to
  571. //                 the tree control's default rendering.
  572. // Remarks:
  573. //     This member is called to render the tree control using user defined
  574. //     fonts and colors. You can override this member to provide additional
  575. //     functionality.
  576. //-----------------------------------------------------------------------
  577. virtual void DoPaint(CDC& dc, BOOL bInternal = TRUE);
  578. //-----------------------------------------------------------------------
  579. // Summary:
  580. //     Retrieves the tree control background color.
  581. // Returns:
  582. //     An RGB value representing the tree control background color.
  583. // See Also:
  584. //     CTreeCtrl::SetBkColor, CTreeCtrl::GetBkColor, GetTreeTextColor,
  585. //     GetItemBackColor, GetItemTextColor
  586. //-----------------------------------------------------------------------
  587. virtual COLORREF GetTreeBackColor() const;
  588. //-----------------------------------------------------------------------
  589. // Summary:
  590. //     Retrieves the tree control text color.
  591. // Returns:
  592. //     An RGB value representing the tree control text color.
  593. // See Also:
  594. //     CTreeCtrl::SetTextColor, CTreeCtrl::GetTextColor, GetTreeBackColor,
  595. //     GetItemBackColor, GetItemTextColor
  596. //-----------------------------------------------------------------------
  597. virtual COLORREF GetTreeTextColor() const;
  598. //-----------------------------------------------------------------------
  599. // Summary:
  600. //     Retrieves a tree items background color.
  601. // Parameters:
  602. //     uState        - Mask indicating which states are to be retrieved. For
  603. //                     more information on possible values for nStateMask, see
  604. //                     the discussion of the state and stateMask members of
  605. //                     the TVITEM structure in the Platform SDK.
  606. //     bTreeHasFocus - true if the tree item has input focus.
  607. //     dwStyle       - Set of flags specifying tree item state.
  608. //     crBack        - Default color to be returned, usually the tree control background color.
  609. // Remarks:
  610. //     This member function is called to retrieve a tree items background
  611. //     color. The value retrieved will depend on the tree items state and
  612. //     TVS_ style.
  613. // Returns:
  614. //     An RGB value representing the specified item background color.
  615. // See Also:
  616. //     GetTreeBackColor, GetTreeTextColor, GetItemTextColor
  617. //-----------------------------------------------------------------------
  618. virtual COLORREF GetItemBackColor(UINT uState, bool bTreeHasFocus, DWORD dwStyle, COLORREF crBack) const;
  619. //-----------------------------------------------------------------------
  620. // Summary:
  621. //     Retrieves a tree items text color.
  622. // Parameters:
  623. //     uState        - Mask indicating which states are to be retrieved. For
  624. //                     more information on possible values for nStateMask, see
  625. //                     the discussion of the state and stateMask members of
  626. //                     the TVITEM structure in the Platform SDK.
  627. //     bTreeHasFocus - true if the tree item has input focus.
  628. //     dwStyle       - Set of flags specifying tree item state.
  629. //     crText        - Default color to be returned, usually the tree control text color.
  630. // Remarks:
  631. //     This member function is called to retrieve a tree items text
  632. //     color. The value retrieved will depend on the tree items state and
  633. //     TVS_ style.
  634. // Returns:
  635. //     An RGB value representing the specified item text color.
  636. // See Also:
  637. //     GetTreeBackColor, GetTreeTextColor, GetItemBackColor
  638. //-----------------------------------------------------------------------
  639. virtual COLORREF GetItemTextColor(UINT uState, bool bTreeHasFocus, DWORD dwStyle, COLORREF crText) const;
  640. //-----------------------------------------------------------------------
  641. // Summary:
  642. //     Determines if the tree control has edit labels.
  643. // Returns:
  644. //     true if the TVS_EDITLABELS style is set for the tree control, otherwise false.
  645. //-----------------------------------------------------------------------
  646. bool HasEditLabels() const;
  647. protected:
  648. //{{AFX_CODEJOCK_PRIVATE
  649. //{{AFX_VIRTUAL(CXTTreeBase)
  650. virtual BOOL PreTranslateMessage(MSG* pMsg);
  651. virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  652. //}}AFX_VIRTUAL
  653. //{{AFX_MSG(CXTTreeBase)
  654. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  655. afx_msg void OnSetFocus(CWnd* pOldWnd);
  656. afx_msg void OnKillFocus(CWnd* pNewWnd);
  657. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  658. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  659. afx_msg void OnSize(UINT nType, int cx, int cy);
  660. afx_msg BOOL OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult);
  661. afx_msg BOOL OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult);
  662. afx_msg BOOL OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
  663. afx_msg BOOL OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
  664. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  665. afx_msg void OnTimer(UINT_PTR nIDEvent);
  666. afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
  667. //}}AFX_MSG
  668. //}}AFX_CODEJOCK_PRIVATE
  669. protected:
  670. //{{AFX_CODEJOCK_PRIVATE
  671. // Needed in order to access protected functions.
  672. class CTreeCtrl_Friendly : public CTreeCtrl { friend class CXTTreeBase; };
  673. //}}AFX_CODEJOCK_PRIVATE
  674. protected:
  675. BOOL                m_bMultiSelect; // TRUE for a multi-selection tree control.
  676. BOOL                m_bBandLabel;   // TRUE to include the label when selecting tree items.
  677. HTREEITEM           m_hSelect;      // For shift selection.
  678. HTREEITEM           m_htiEdit;      // Tree item that is currently edited.
  679. HTREEITEM           m_htiLast;      // Tree item that was last had the mouse over.
  680. CColorFontMap       m_mapColorFont; // Maps HTREEITEM handles with CLRFONT structures that contains the color and logfont information for the tree item.
  681. CTreeCtrl_Friendly* m_pTreeCtrl;    // Self tree pointer.
  682. private:
  683. bool m_bActionDone;
  684. bool m_bOkToEdit;
  685. };
  686. //////////////////////////////////////////////////////////////////////
  687. AFX_INLINE HTREEITEM CXTTreeBase::GetNextItem(HTREEITEM hItem, UINT nCode) const {
  688. ASSERT(::IsWindow(m_pTreeCtrl->m_hWnd)); return m_pTreeCtrl->GetNextItem(hItem, nCode);
  689. }
  690. AFX_INLINE HTREEITEM CXTTreeBase::GetFocusedItem() const {
  691. ASSERT(m_bMultiSelect); return m_pTreeCtrl->GetSelectedItem();
  692. }
  693. AFX_INLINE BOOL CXTTreeBase::IsSelected(HTREEITEM hItem) const {
  694. return !!(TVIS_SELECTED & m_pTreeCtrl->GetItemState(hItem, TVIS_SELECTED));
  695. }
  696. AFX_INLINE BOOL CXTTreeBase::IsMultiSelect() const {
  697. return m_bMultiSelect;
  698. }
  699. AFX_INLINE BOOL CXTTreeBase::SetBandingHit(BOOL bLabel) {
  700. BOOL bReturn = m_bBandLabel; m_bBandLabel = bLabel; return bReturn;
  701. }
  702. AFX_INLINE CXTTreeBase::CLRFONT::CLRFONT() : color((COLORREF)-1), colorBack((COLORREF)-1) {
  703. ::ZeroMemory(&logfont, sizeof(LOGFONT));
  704. }
  705. //{{AFX_CODEJOCK_PRIVATE
  706. #define DECLATE_TREE_BASE(ClassName, Tree, Base)
  707. class _XTP_EXT_CLASS ClassName : public Tree, public Base
  708. {
  709. public:
  710. ClassName() {
  711. m_bPreSubclassInit = true;
  712. }   
  713. virtual UINT GetItemState(HTREEITEM hItem, UINT nStateMask) const  {
  714. return Base::GetItemState(hItem, nStateMask);
  715. }
  716. virtual BOOL SelectItem(HTREEITEM hItem) {
  717. return Base::SelectItem(hItem);
  718. }
  719. virtual BOOL SetItemState(HTREEITEM hItem, UINT nState, UINT nStateMask) {
  720. return Base::SetItemState(hItem, nState, nStateMask);
  721. }
  722. virtual HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const {
  723. return Base::GetNextItem(hItem, nCode);
  724. }
  725. virtual HTREEITEM GetNextItem(HTREEITEM hItem) const {
  726. return Base::GetNextItem(hItem);
  727. }
  728. protected:
  729. virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) {
  730. return Base::OnNotify(wParam, lParam, pResult);
  731. }   
  732. virtual BOOL PreTranslateMessage(MSG* pMsg) {
  733. return Base::PreTranslateMessage(pMsg);
  734. }   
  735. virtual bool Init() {
  736. return Base::Init();
  737. }   
  738. virtual void PreSubclassWindow()
  739. {
  740. Tree::PreSubclassWindow();
  741. if (m_bPreSubclassInit)
  742. Init();
  743. }   
  744. virtual BOOL PreCreateWindow(CREATESTRUCT& cs)
  745. {
  746. if (!Tree::PreCreateWindow(cs))
  747. return FALSE;
  748. m_bPreSubclassInit = false;
  749. return TRUE;
  750. }   
  751. bool m_bPreSubclassInit;
  752. afx_msg void OnLButtonDown(UINT nFlags, CPoint point) {
  753. Base::OnLButtonDown(nFlags, point);
  754. }   
  755. afx_msg void OnRButtonDown(UINT nFlags, CPoint point) {
  756. Base::OnRButtonDown(nFlags, point);
  757. }   
  758. afx_msg void OnSetFocus(CWnd* pOldWnd) {
  759. Base::OnSetFocus(pOldWnd);
  760. }   
  761. afx_msg void OnKillFocus(CWnd* pNewWnd) {
  762. Base::OnKillFocus(pNewWnd); 
  763. }   
  764. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
  765. Base::OnKeyDown(nChar, nRepCnt, nFlags);
  766. }   
  767. afx_msg BOOL OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) {
  768. return Base::OnBeginLabelEdit(pNMHDR, pResult); 
  769. }   
  770. afx_msg BOOL OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) {
  771. return Base::OnEndLabelEdit(pNMHDR, pResult);
  772. }   
  773. afx_msg BOOL OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult) {
  774. return Base::OnItemExpanding(pNMHDR, pResult);
  775. }   
  776. afx_msg BOOL OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult) {
  777. return Base::OnDeleteItem(pNMHDR, pResult);
  778. }   
  779. afx_msg void OnSize(UINT nType, int cx, int cy) {
  780. Base::OnSize(nType, cx, cy);
  781. }   
  782. afx_msg void OnMouseMove(UINT nFlags, CPoint point) {   
  783. Base::OnMouseMove(nFlags, point);
  784. }   
  785. afx_msg void OnTimer(UINT_PTR nIDEvent) {       
  786. Base::OnTimer(nIDEvent);
  787. }   
  788. afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point) {
  789. Base::OnNcMouseMove(nHitTest, point);
  790. }
  791. afx_msg BOOL OnEraseBkgnd(CDC*) {
  792. return TRUE;
  793. }
  794. afx_msg void OnPaint() {
  795. CPaintDC dc(this);
  796. DoPaint(dc); 
  797. }
  798. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)
  799. {
  800. if (Tree::OnCreate(lpCreateStruct) == -1)
  801. return -1;
  802. Init();
  803. return 0;
  804. }   
  805. };
  806. #define ON_TREECTRL_REFLECT
  807. ON_WM_LBUTTONDOWN()
  808. ON_WM_SETFOCUS()
  809. ON_WM_KILLFOCUS()
  810. ON_WM_RBUTTONDOWN()
  811. ON_WM_KEYDOWN()
  812. ON_WM_ERASEBKGND()
  813. ON_WM_PAINT()
  814. ON_WM_SIZE()
  815. ON_NOTIFY_REFLECT_EX(TVN_DELETEITEM, OnDeleteItem)
  816. ON_NOTIFY_REFLECT_EX(TVN_ITEMEXPANDING, OnItemExpanding)
  817. ON_NOTIFY_REFLECT_EX(TVN_BEGINLABELEDIT, OnBeginLabelEdit)
  818. ON_NOTIFY_REFLECT_EX(TVN_ENDLABELEDIT, OnEndLabelEdit)
  819. ON_WM_MOUSEMOVE()
  820. ON_WM_TIMER()
  821. ON_WM_NCMOUSEMOVE()
  822. ON_WM_CREATE
  823. //}}AFX_CODEJOCK_PRIVATE
  824. const DWORD TVIS_FOCUSED           = 0x0001;   //<ALIAS CXTTreeBase::SetItemState@HTREEITEM@UINT@UINT>
  825. #endif // !defined(__XTTREEBASE_H__)