TreeCtrlMultiColumn.h
上传用户:louyoung
上传日期:2007-01-02
资源大小:123k
文件大小:3k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 6/20/98 2:45:52 PM
  5.   Comments: TreeCtrlMultiColumn.h: interface for the CTreeMultiColumnCtrl class.
  6.  ************************************/
  7. #if !defined(AFX_TREECTRLMULTICOLUMN_H__3FDB7CD3_028A_11D2_861E_0040055C08D9__INCLUDED_)
  8. #define AFX_TREECTRLMULTICOLUMN_H__3FDB7CD3_028A_11D2_861E_0040055C08D9__INCLUDED_
  9. #if _MSC_VER >= 1000
  10. #pragma once
  11. #endif // _MSC_VER >= 1000
  12. #include "Tsyslistviewex.h"
  13. #define LVM_SETPARENT WM_USER + 1
  14. #define LVM_EXPAND WM_USER + 2
  15. #define LVM_COLLAPSE WM_USER + 3
  16. struct _STTreeMCCloneMessage {
  17. CMap<UINT,UINT,BOOL,BOOL> m_mapMessage;
  18. CMap<UINT,UINT,BOOL,BOOL> m_mapMessageHeader;
  19. _STTreeMCCloneMessage()
  20. {
  21. m_mapMessage[LVM_INSERTITEMA] = TRUE;
  22. m_mapMessage[LVM_INSERTITEMW] = TRUE;
  23. m_mapMessage[LVM_DELETEITEM] = TRUE;
  24. m_mapMessage[LVM_DELETEALLITEMS] = TRUE;
  25. m_mapMessage[LVM_SETITEMTEXTA] = TRUE;
  26. m_mapMessage[LVM_SETITEMTEXTW] = TRUE;
  27. m_mapMessage[LVM_SETITEMA] = TRUE;
  28. m_mapMessage[LVM_SETITEMW] = TRUE;
  29. m_mapMessage[LVM_GETITEMCOUNT] = TRUE;
  30. m_mapMessageHeader[LVM_INSERTCOLUMNA] = TRUE;
  31. m_mapMessageHeader[LVM_INSERTCOLUMNW] = TRUE;
  32. m_mapMessageHeader[LVM_DELETECOLUMN] = TRUE;
  33. m_mapMessageHeader[LVM_SETCOLUMNA] = TRUE;
  34. m_mapMessageHeader[LVM_SETCOLUMNW] = TRUE;
  35. }
  36. BOOL Get(CMap<UINT,UINT,BOOL,BOOL>* pMap, UINT message)
  37. {
  38. BOOL value = FALSE;
  39. BOOL result = pMap->Lookup(message, value);
  40. if (result) result = value;
  41. return result;
  42. }
  43. BOOL IsCloneMessage(UINT message)
  44. {
  45. return Get(&m_mapMessage, message);
  46. }
  47. BOOL IsHeaderMessage(UINT message)
  48. {
  49. return Get(&m_mapMessageHeader, message);
  50. }
  51. };
  52. class CTreeMultiColumnCtrl : public CTsyslistviewex  
  53. {
  54. public:
  55. void Fill(LPCTSTR lpszItems);
  56. int GetRootColumn() const;
  57. virtual int SetRootColumn(int nNewTreeColumn);
  58. virtual void RecExpandItems(int nItem);
  59. virtual int GetFirstItemChild(int nItem);
  60. virtual int GetNextItemChild();
  61. void ExpandItem(int nItem);
  62. void CollapseItem(int nItem);
  63. BOOL ItemIsExpanded(int iItem);
  64. BOOL IsLastChildren(int iItem);
  65. int GetItemPath(int iItem, CArray<int, int>& arParents);
  66. BOOL ItemHasChildren(int iItem);
  67. int GetItemParent(int iItem);
  68. BOOL SetItemParent(int iItem, int iItemParent);
  69. CTreeMultiColumnCtrl(int nHeightRel = 4);
  70. virtual ~CTreeMultiColumnCtrl();
  71. virtual void ViewGridLines(BOOL bEnable = true) {return;};
  72. virtual void EnableSort(BOOL bEnable = true) {return;};
  73. virtual void PreSubclassWindow( );
  74. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam ); 
  75. //{{AFX_PUBLIC_DATA:)
  76. //}}AFX_PUBLIC_DATA:)
  77. protected:
  78. virtual int GetItemLevel(int nItem);
  79. virtual BOOL IsPtnInSquareRect(CPoint point);
  80. virtual void UpdateTree(UINT message, WPARAM wParam, LPARAM lParam, LRESULT result);
  81. virtual void DrawCell(CDC* pDC, CRect& drawRect, DWORD format, int nItem, int nColumn);
  82. //{{AFX_MSG(CTreeMultiColumnCtrl)
  83. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  84. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  85. //}}AFX_MSG
  86. private:
  87. int m_nLastItemFound;
  88. int m_nLastItemFind;
  89. int m_nTreeColumn;
  90. short m_bInsideCode;
  91. static _STTreeMCCloneMessage m_mapCloneMessage;
  92. CListCtrl m_listItems;
  93. CMap<int,int,int,int> m_mapParents;
  94. CMap<int,int,BOOL,BOOL> m_mapItemExpanded;
  95. DECLARE_MESSAGE_MAP()
  96. };
  97. #endif // !defined(AFX_TREECTRLMULTICOLUMN_H__3FDB7CD3_028A_11D2_861E_0040055C08D9__INCLUDED_)