supergridctrl.h
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:19k
源码类别:

CA认证

开发平台:

Visual C++

  1. #if !defined(AFX_SUPERGRIDCTRL_H__C6DF1701_806D_11D2_9A94_002018026B76__INCLUDED_)
  2. #define AFX_SUPERGRIDCTRL_H__C6DF1701_806D_11D2_9A94_002018026B76__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // SuperGridCtrl.h : header file
  7. //
  8. #include <afxtempl.h>
  9. #include "....DataSafe.H"
  10. class CItemInfo //should have called this LV_INSERTITEM ..what ever
  11. {
  12. public:
  13. /* struct CListProgressbar
  14. {
  15. //Note: The m_text member specifies the text in
  16. //the progress bar
  17. //The max value of progress bar. Use -1 to disable
  18. //progress bar.The min value is supposed to be 0.
  19. //Default value: -1
  20. int m_maxvalue;
  21. //The value the progress bar has. The width of the 
  22. //progress bar is calculated with use m_value and 
  23. //m_maxvalue.
  24. //Default value: 0
  25. int m_value;
  26. //The color the progress bar should be drawn with. 
  27. //Default value: DEFAULTCOLOR
  28. COLORREF m_fillColor;
  29. //The color of the text on the progress bar
  30. //Default value: DEFAULTCOLOR
  31. COLORREF m_fillTextColor;
  32. //How to draw the edge. Use 0 for no edge.
  33. //See CDC::DrawEdge for different styles.
  34. //Default value: EDGE_SUNKEN
  35. UINT m_edge;
  36. } m_progressBar;*/
  37. // UINT m_uIndex;//自己添加的,用来标示在树中的序号,与数组对应
  38. CDataSafe * GetDataSafe()
  39. {
  40. return &this->m_DataSafe;
  41. }
  42. void CopyDataSafe(CDataSafe * pDataSafe)
  43. {
  44. strncpy(pDataSafe->cName, this->m_DataSafe.cName, 255);
  45. pDataSafe->dOldLen = this->m_DataSafe.dOldLen;
  46. pDataSafe->ftLastWriteTime = this->m_DataSafe.ftLastWriteTime;
  47. pDataSafe->bIsFile = this->m_DataSafe.bIsFile;
  48. pDataSafe->dBeginSeek = this->m_DataSafe.dBeginSeek;
  49. pDataSafe->uParentID = this->m_DataSafe.uParentID;
  50. pDataSafe->dNewLen = this->m_DataSafe.dNewLen;
  51. if(this->m_DataSafe.cPathName)
  52. strncpy(pDataSafe->cPathName, this->m_DataSafe.cPathName, 255); //文件才有效
  53. }
  54. // int GetImage()
  55. // {
  56. // return m_iImage;
  57. // }
  58. void SetDataSafe(const CDataSafe * pDataSafe)
  59. {
  60. strncpy(this->m_DataSafe.cName, pDataSafe->cName, 255);
  61. this->m_DataSafe.dOldLen = pDataSafe->dOldLen;
  62. this->m_DataSafe.ftLastWriteTime = pDataSafe->ftLastWriteTime;
  63. this->m_DataSafe.bIsFile = pDataSafe->bIsFile;
  64. this->m_DataSafe.dBeginSeek = pDataSafe->dBeginSeek;
  65. this->m_DataSafe.uParentID = pDataSafe->uParentID;
  66. this->m_DataSafe.dNewLen = pDataSafe->dNewLen;
  67. if(pDataSafe->cPathName)
  68. strncpy(this->m_DataSafe.cPathName, pDataSafe->cPathName, 255); //文件才有效
  69. }
  70. CItemInfo():m_bCheck(0),m_iImage((const int)-1),m_lParam(NULL),m_clf((COLORREF)-1){};
  71. void SetItemText(const CString& strItem){ m_strItemName = strItem; }
  72. void SetItemText(const CString& strItem, COLORREF clf) { m_strItemName = strItem; m_clf = clf;}
  73. void AddSubItemText(const CString& strSubItem){ m_SubItems.Add(strSubItem); }
  74. void AddSubItemText(const CString& strSubItem, COLORREF clf)
  75. int nIndex = m_SubItems.Add(strSubItem); 
  76. m_mapClf.SetAt(nIndex, clf);
  77. }
  78. void SetSubItemText(int iSubItem, const CString& strSubItem){ m_SubItems.SetAtGrow(iSubItem, strSubItem); }
  79. void SetSubItemText(int iSubItem, const CString& strSubItem, COLORREF clf)
  80. {
  81. m_SubItems.SetAtGrow(iSubItem, strSubItem);
  82. m_mapClf.SetAt(iSubItem, clf);
  83. }
  84. const CString& GetItemText(void){ return m_strItemName; }
  85. CString GetSubItem(int iSubItem){ return m_SubItems.GetAt(iSubItem); }
  86. int GetItemCount(void) const { return m_SubItems.GetSize(); }
  87. enum CONTROLTYPE {edit/*default*/, combobox, datecontrol/*your control*/, spinbutton/*your control*/, dropdownlistviewwhatevercontrol/*your control*/};
  88. //all cols in this row is default edit
  89. void SetControlType(CONTROLTYPE enumCtrlType, int nCol=-1){ m_controlType.SetAt(nCol, enumCtrlType); }
  90. BOOL GetControlType(int nCol, CONTROLTYPE& controlType) const
  91. {
  92. if(!m_controlType.Lookup(nCol,controlType))
  93. {
  94. controlType = edit;//default;
  95. return 0;
  96. }
  97. return 1;
  98. }
  99. void SetListData(int iSubItem, CStringList *strInitArr)
  100. {
  101. CStringList *list;
  102. list = new CStringList;//will be deleted in destructor
  103. list->AddTail(strInitArr);
  104. m_listdata.SetAt(iSubItem, list);
  105. }
  106. BOOL GetListData(int iSubItem, CStringList*& pList) const
  107. {
  108. return m_listdata.Lookup(iSubItem, pList);
  109. }
  110. //used if LVS_EX_CHECKBOXES style
  111. void SetCheck(BOOL bCheck){ m_bCheck = bCheck;}
  112. BOOL GetCheck(void) const {return m_bCheck;}
  113. void SetImage(int iImage){m_iImage = iImage;}
  114. int GetImage(void) const {return m_iImage;}//return icon
  115. COLORREF GetItemClr(void) const {return m_clf;}
  116. COLORREF GetBkColor(int iSubItem) const
  117. {
  118. COLORREF clref;
  119. if(!m_mapClf.Lookup(iSubItem,clref))
  120. {
  121. return (COLORREF)-1;
  122. }
  123. return clref;
  124. }
  125. LPARAM m_lParam;//why not use this like you use it in listbox, listctrl...
  126. //YOU SHOULD MODIFY THIS WHEN EVER YOU ADD NEW DATA TO THIS CLASS
  127. void CopyObjects(CItemInfo* pItemInfo)
  128. {
  129. SetItemText(pItemInfo->GetItemText());
  130. m_SubItems.Copy(pItemInfo->m_SubItems);
  131. CopyControls(pItemInfo);
  132. CopyColors(pItemInfo);
  133. SetCheck(pItemInfo->GetCheck());
  134. SetImage(pItemInfo->GetImage());
  135. m_lParam = pItemInfo->m_lParam;
  136. m_clf=pItemInfo->m_clf;
  137. }
  138. void CopyControls(CItemInfo* pItemInfo)
  139. {
  140. for(int nCol=0; nCol < pItemInfo->GetItemCount(); nCol++)
  141. {
  142. CItemInfo::CONTROLTYPE ctrlType;
  143. if(pItemInfo->GetControlType(nCol, ctrlType))//true if other than edit-control
  144. {
  145. SetControlType(ctrlType, nCol);
  146. //should test if this is listdata material
  147. CStringList *list = NULL;
  148. pItemInfo->GetListData(nCol, list);
  149. if(list!=NULL)
  150. SetListData(nCol, list);
  151. }
  152. }
  153. }
  154. void CopyColors(CItemInfo* pItemInfo)
  155. {
  156. for(int nCol=0; nCol < pItemInfo->GetItemCount(); nCol++)
  157. {
  158. COLORREF clref;
  159. if(pItemInfo->m_mapClf.Lookup(nCol, clref))
  160. m_mapClf.SetAt(nCol, clref);
  161. }
  162. }
  163. ~CItemInfo()
  164. {
  165. POSITION pos = m_listdata.GetStartPosition();
  166. while(pos != NULL)
  167. {
  168. int nKey;
  169. CStringList* b; 
  170. m_listdata.GetNextAssoc(pos, nKey, b);
  171. if(b!=NULL)
  172. {
  173. b->RemoveAll();
  174. delete b;
  175. }
  176. }
  177. m_listdata.RemoveAll();
  178. }
  179. private:
  180. CONTROLTYPE m_enumCtrlType; 
  181. CMap<int,int, CONTROLTYPE, CONTROLTYPE&> m_controlType;//hmm
  182. CMap<int,int, COLORREF, COLORREF&> m_mapClf;//colors
  183. CMap<int,int, CStringList*, CStringList*> m_listdata;//listbox
  184. CString m_strItemName;//col 0...
  185. CStringArray m_SubItems;//col 1... N
  186. BOOL m_bCheck;
  187. COLORREF m_clf;
  188. CDataSafe m_DataSafe;
  189. int m_iImage;
  190. };
  191. /////////////////////////////////////////////////////////////////////////////
  192. //
  193. // CSuperGridCtrl 
  194. //
  195. /////////////////////////////////////////////////////////////////////////////
  196. class CSuperGridCtrl : public CListCtrl
  197. {
  198. // Construction
  199. public:
  200. class CTreeItem;
  201. CSuperGridCtrl();
  202. protected:
  203. //nested class forward decl.
  204. public:
  205. // Overrides
  206. //MUST override this to make a copy of CItemInfo..see the CMySuperGrid.cpp for implementation
  207. //used in drag/drop operations
  208. virtual CItemInfo* CopyData(CItemInfo* lpSrc);
  209. //sets the icon state...called from within DrawItem returns valid image index
  210. //You MUST override this function to set your current icon, must of course be a valid CImageList index
  211. virtual int GetIcon(const CTreeItem* pItem);
  212. //override this to set the color for current cell
  213. virtual COLORREF GetCellRGB(void);
  214. //override this to update listview items, called from within OnEndlabeledit.
  215. virtual void OnUpdateListViewItem(CTreeItem* lpItem, LV_ITEM *plvItem);
  216. //override this to activate any control when lButtonDown in a cell, called from within OnLButtonDown
  217. virtual void OnControlLButtonDown(UINT nFlags, CPoint point, LVHITTESTINFO& ht);
  218. //override this to provide your dragimage, default: creates an image + text
  219. virtual CImageList *CreateDragImageEx(int nItem);
  220.     //called before item is about to explode, return TRUE to continue, FALSE to prevent expanding
  221. virtual BOOL OnItemExpanding(CTreeItem *pItem, int iItem);
  222. //called after item has expanded
  223. virtual BOOL OnItemExpanded(CTreeItem* pItem, int iItem);
  224. //called before item are collapsed,return TRUE to continue, FALSE to prevent collapse
  225. virtual BOOL OnCollapsing(CTreeItem *pItem);
  226. //called after item has collapsed
  227. virtual BOOL OnItemCollapsed(CTreeItem *pItem);
  228. //called before item is about to be deleted,return TRUE to continue, FALSE to prevent delete item
  229. virtual BOOL OnDeleteItem(CTreeItem* pItem, int nIndex);
  230. //called before VK_MULTIPLY keydown, return TRUE to continue, FALSE to prevent expandall
  231. virtual BOOL OnVKMultiply(CTreeItem *pItem, int nIndex);
  232. //called before VK_SUBTRACT keydown, return TRUE to continue, FALSE to prevent collapse item
  233. virtual BOOL OnVkSubTract(CTreeItem *pItem, int nIndex);
  234. //called before VK_ADD keydown, return TRUE to continue, FALSE to prevent expanding item
  235. virtual BOOL OnVKAdd(CTreeItem *pItem, int nIndex);
  236. //called from PreTranslateMessage, override this to handle other controls than editctrl's
  237. virtual BOOL OnVkReturn(void);
  238. //called before from within OnlButtonDown and OnDblclk, but before anything happens, return TRUE to continue, FALSE to say not selecting the item
  239. virtual BOOL OnItemLButtonDown(LVHITTESTINFO& ht);
  240. public:
  241. void DrawProgressBar(CDC* pDC, int iItem, int iSubItem);
  242. inline void FillSolidRect(CDC* pDC, const RECT& rect, const COLORREF color)
  243. {
  244. if(color != CLR_NONE)
  245. pDC->FillSolidRect(&rect, color);
  246. }
  247. //creates a root
  248. CTreeItem*  InsertRootItem(CItemInfo * lpRoot);
  249. //from the looks of it,...it deletes a rootitem
  250. void DeleteRootItem(CTreeItem * lpRoot);
  251. //hmm
  252. BOOL IsRoot(CTreeItem * lpItem);
  253. //given the rootindex it returns the rootptr
  254. CTreeItem* GetRootItem(int nIndex);
  255. int GetRootCount() { return m_RootItems.GetCount();}
  256. //call this to delete all items in grid
  257. void DeleteAll();
  258. //return previous node from pItem, given a RootItem
  259. CTreeItem* GetPrev(CTreeItem* pRoot, CTreeItem *pItem, BOOL bInit = TRUE, BOOL bDontIncludeHidden=TRUE);
  260. //return next node from pItem, given a RootItem
  261. CTreeItem* GetNext(CTreeItem* pRoot, CTreeItem* pNode, BOOL bInit = TRUE, BOOL bDontIncludeHidden=TRUE);
  262. //returns the selected item :)
  263. int GetSelectedItem(void) const;
  264. //returns the itemdata associated with the supergrid
  265. CTreeItem* GetTreeItem(int nIndex);
  266. // Retrieves the number of items associated with the SuperGrid control.
  267. UINT GetCount(void);
  268. //returns number of children given the pItem node ptr.
  269. int NumChildren(const CTreeItem *pItem) const;
  270. //Determines if this tree item is a child of the specified parent
  271. BOOL IsChildOf(const CTreeItem* pParent, const CTreeItem* pChild) const;
  272. //hmm
  273. BOOL ItemHasChildren(const CTreeItem* pItem) const;
  274. // Use this to indicate that pItem has children, but has not been inserted yet.
  275. void SetChildrenFlag(CTreeItem *pItem,int nFlag) const;
  276. //are children collapsed
  277. BOOL IsCollapsed(const CTreeItem* pItem) const;
  278. //return the Indent Level of pItem
  279. int GetIndent(const CTreeItem* pItem) const;
  280. //Sets the Indentlevel of pItem
  281. void SetIndent(CTreeItem *pItem, int iIndent);
  282. //get the pItems current listview index, 
  283. int GetCurIndex(const CTreeItem *pItem) const;
  284. //set pItems current listview index
  285. void SetCurIndex(CTreeItem* pItem, int nIndex);
  286. //sets the pItem' parent
  287. void SetParentItem(CTreeItem*pItem, CTreeItem* pParent);
  288. //gets pItems parent
  289. CTreeItem* GetParentItem(const CTreeItem* pItem); 
  290. //return ptr to CItemInfo daaa
  291. CItemInfo* GetData(const CTreeItem* pItem); 
  292. //sets the CItemInfo ptr of pItem
  293. void UpdateData(CTreeItem* pItem, CItemInfo* lpInfo);
  294. //Insert item and return new parent node.
  295. //the bUpdate is here for performance reasons, when you insert say 100 node each having 10 children(1000 listview items)
  296. //the bUpdate should be set to FALSE(default) but when you want to insert an item, and you want to user to see it right away
  297. //set bUpdate to TRUE.(see the use of bUpdate in the HowToInsertItemsAfterTheGridHasBeenInitialized function in the CMySuperGridCtrl)
  298. CTreeItem* InsertItem(CTreeItem *pParent, CItemInfo* lpInfo, BOOL bUpdate=FALSE);
  299. //collapse all children from pItem
  300. void Collapse(CTreeItem *pItem);
  301. //expand one folder and return the last index of the expanded folder
  302. int Expand(CTreeItem* pSelItem, int nIndex);
  303. //expand all items from pItem and return last index of the expanded folder
  304. void ExpandAll(CTreeItem *pItem, int& nScroll);
  305. //expand all node in pItem and stop at pStopAt, used in SelectNode function
  306. void ExpandUntil(CTreeItem *pItem, CTreeItem* pStopAt);
  307. //use this if you want to select a node 
  308. //if the node is collapsed all items with in the node are expanded and the node is selected
  309. //it returns the listview index for the selected node
  310. int SelectNode(CTreeItem *pLocateNode);
  311. //Delete an item in the listview 
  312. //takes the node to be delete and its listview item index as arg.
  313. //note the item you delete must be visible, hence the nItem as arg. 
  314. void DeleteItemEx(CTreeItem *pSelItem, int nItem);
  315. //returns the number of columns in the listview
  316. int GetNumCol(void);
  317. //does a Quicksort of the pParents children and if bSortChildren set, 
  318. //all items from pParent are sorted. 
  319. void Sort(CTreeItem* pParent, BOOL bSortChildren);
  320. // simpel wrapper for the CObList in CTreeItem, same usage as in the COblist
  321. POSITION GetHeadPosition(CTreeItem* pItem) const;
  322. POSITION GetTailPosition(CTreeItem *pItem) const;
  323. CTreeItem* GetNextChild(CTreeItem *pItem, POSITION& pos) const;
  324. CTreeItem* GetPrevChild(CTreeItem *pItem, POSITION& pos) const;
  325. void AddTail(CTreeItem *pParent, CTreeItem *pChild);
  326. //simpel wrapper for the CPtrList collection of rootitems
  327. //feel free to add more of these simple wrappers.
  328. POSITION GetRootHeadPosition(void) const;
  329. POSITION GetRootTailPosition(void) const;
  330. CTreeItem* GetNextRoot(POSITION& pos) const;
  331. CTreeItem* GetPrevRoot(POSITION& pos) const;
  332. // ClassWizard generated virtual function overrides
  333. //{{AFX_VIRTUAL(CSuperGridCtrl)
  334. public:
  335. //handle VK_xxxx
  336. virtual BOOL PreTranslateMessage(MSG* pMsg);
  337. protected:
  338. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  339. //}}AFX_VIRTUAL
  340. // Implementation
  341. public:
  342. virtual ~CSuperGridCtrl();
  343. protected:
  344. //given the rootptr it returns the rootindex.
  345. int GetRootIndex(CTreeItem * lpRoot);
  346. //delete pItem and all of its children
  347. BOOL Delete(CTreeItem *pItem, BOOL bClean=TRUE/*delete itemdata*/);
  348. //used in drag/drop operation..
  349. void CopyChildren(CTreeItem* pDest, CTreeItem* pSrc);
  350. //drag/drop thing....clipboard not supported!
  351. BOOL DoDragDrop(CTreeItem* pTarget, CTreeItem* pSelItem);
  352. //updates internal nodes, called when ever insert,delete on listview
  353. void InternaleUpdateTree(void);
  354. //Get ListView Index from pNode
  355. int NodeToIndex(CTreeItem *pNode);
  356. //see if user clicked the [+] [-] sign, also handles LVS_EX_CHECKBOXES.
  357. BOOL HitTestOnSign(CPoint point, LVHITTESTINFO& ht);
  358. //positions an edit-control and creates it
  359. // CEdit* EditLabelEx(int nItem, int nCol);
  360. int m_cxImage, m_cyImage;//icon size
  361. //translates column index value to a column order value.
  362. int IndexToOrder(int iIndex);
  363. //set hideflag for pItem
  364. void Hide(CTreeItem* pItem, BOOL bFlag);
  365. //hmm
  366. int GetCurSubItem(void){return m_CurSubItem;}
  367. int GetDragItem(void) const {return m_nDragItem; }
  368. int GetDropTargetItem(void) const {return m_nDragTarget; }
  369. private:
  370. //list of rootItems
  371. CPtrList m_RootItems;
  372. //internal helpers
  373. BOOL _Delete(CTreeItem* pStartAt, CTreeItem *pItem, BOOL bClean=TRUE/*delete itemdata*/);
  374. UINT _GetCount(CTreeItem* pItem, UINT& nCount);
  375. //hmm
  376. void DrawTreeItem(CDC* pDC, CTreeItem* pSelItem, int nListItem, const CRect& rcBounds);
  377. //makes the dot ... thing
  378. LPCTSTR MakeShortString(CDC* pDC, LPCTSTR lpszLong, int nColumnLen, int nOffset);
  379. //set the hideflag from pItem and all its children
  380. void HideChildren(CTreeItem *pItem, BOOL bHide, int iIndent);
  381. //checks whether a column is visible, if not scrolls to it
  382. void MakeColumnVisible(int nCol);
  383. //hmm
  384. void DrawFocusCell(CDC *pDC, int nItem, int iSubItem);
  385. //draw the down arrow if any combobox precent in the listview item
  386. void DrawComboBox(CDC *pDC, CTreeItem *pSelItem, int nItem, int nColumn);
  387. int m_CurSubItem;//keyboard handling..it is what it says
  388. //hmm these represents the state of my expresso machine
  389.     int m_nDragItem, m_nDragTarget;
  390.     BOOL m_bIsDragging;
  391. //helper compare fn used with Quicksort
  392. static int CompareChildren(const void* p1, const void* p2);
  393. void CleanMe(CTreeItem *pItem);
  394. int _NodeToIndex(CTreeItem *pStartpos, CTreeItem* pNode, int& nIndex, BOOL binit = TRUE);
  395. CPen m_psTreeLine;
  396. CPen m_psRectangle;
  397. CPen m_psPlusMinus;
  398. CBrush m_brushErase;
  399. friend class CRectangle;
  400. HIMAGELIST m_himl;
  401. // Generated message map functions
  402. protected:
  403. //{{AFX_MSG(CSuperGridCtrl)
  404. // afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);
  405. // afx_msg void OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult);
  406. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  407. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  408. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  409. // afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  410. // afx_msg void OnTimer(UINT nIDEvent);
  411. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  412. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  413. // afx_msg void OnKeydown(NMHDR* pNMHDR, LRESULT* pResult);
  414. // afx_msg void OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult);
  415. afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  416. afx_msg void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  417. afx_msg void OnSysColorChange();
  418. //}}AFX_MSG
  419. // afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
  420. DECLARE_MESSAGE_MAP()
  421. };
  422. class CRectangle
  423. {
  424. public:
  425. CRectangle(CSuperGridCtrl* pCtrl, CDC* pDC, int iIndent, const CRect& rcBounds);
  426. ~CRectangle();
  427. void DrawRectangle(CSuperGridCtrl *pCtrl);
  428. BOOL HitTest(CPoint pt);
  429. void DrawPlus(void);
  430. void DrawMinus(void);
  431. int GetLeft(void){return m_left;}
  432. int GetTop(void){return m_top;}
  433. CRect GetHitTestRect(void) { return CRect(m_left_top, m_right_bottom);}
  434. private:
  435. CDC *m_pDC;
  436. SIZE m_right_bottom;
  437. int m_left;
  438. int m_top;
  439. POINT m_left_top;
  440. int m_topdown;
  441. };
  442. //the nested class 
  443. class CSuperGridCtrl::CTreeItem : public CObject
  444. {
  445. CTreeItem(): m_pParent(NULL), m_bHideChildren(0), m_nIndex(-1), m_nIndent(-1),m_bSetChildFlag(-1){};
  446. ~CTreeItem();
  447. CObList m_listChild;
  448. CTreeItem* m_pParent;
  449. CItemInfo* m_lpNodeInfo;
  450. BOOL m_bHideChildren;  
  451. int m_nIndex; //CListCtrl index
  452. int m_nIndent; 
  453. int m_bSetChildFlag;
  454. friend class CSuperGridCtrl;
  455. };
  456. /////////////////////////////////////////////////////////////////////////////
  457. /////////////////////////////////////////////////////////////////////////////
  458. //{{AFX_INSERT_LOCATION}}
  459. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  460. #endif // !defined(AFX_SUPERGRIDCTRL_H__C6DF1701_806D_11D2_9A94_002018026B76__INCLUDED_)