GridCtrl.h
上传用户:wenjimin
上传日期:2014-08-12
资源大小:111k
文件大小:11k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #if !defined(AFX_GRIDCTRL_H__768A7058_3D28_11D8_B617_A69FB0BE0671__INCLUDED_)
  2. #define AFX_GRIDCTRL_H__768A7058_3D28_11D8_B617_A69FB0BE0671__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // GridCtrl.h : header file
  7. //
  8. // Grid line/scrollbar selection
  9. #define GVL_NONE                0L      // Neither
  10. #define GVL_HORZ                1L      // Horizontal line or scrollbar
  11. #define GVL_VERT                2L      // Vertical line or scrollbar
  12. #define GVL_BOTH                3L      // Both
  13. #include "GridDefaultCell.h"
  14. #include "CellRange.h"
  15. //#include "GridCell.h"
  16. #include <afxtempl.h>//为了使用数组和Map
  17. class CMyGridFrame;
  18. // storage typedef for each row in the grid
  19. typedef CTypedPtrArray<CObArray, CGridCellBase*> GRID_ROW;
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CGridCtrl window
  22. class CGridCtrl : public CWnd
  23. {
  24. DECLARE_DYNCREATE(CGridCtrl)
  25. // Construction
  26. public:
  27. CGridCtrl(int nRows = 0, int nCols = 0, int nFixedRows = 0, int nFixedCols = 0);
  28. // Attributes
  29. public:
  30. BOOL SetRowCount(int nRows = 10);//设置总行数,缺省为10
  31. BOOL SetColumnCount(int nCols = 10);//设置总列数
  32.     BOOL SetFixedRowCount(int nFixedRows = 1);//设置固定行数
  33.     BOOL SetFixedColumnCount(int nFixedCols = 1);//固定列数
  34. int  GetRowCount() const                    { return m_nRows; }//返回...
  35.     int  GetColumnCount() const                 { return m_nCols; }
  36.     int  GetFixedRowCount() const               { return m_nFixedRows; }
  37.     int  GetFixedColumnCount() const            { return m_nFixedCols; }
  38. void SetHeaderSort(BOOL bSortOnClick = TRUE){ m_bSortOnClick = bSortOnClick;    }
  39. BOOL GetHeaderSort() const                  { return m_bSortOnClick; }
  40. int  GetRowHeight(int nRow) const;//返回行高
  41.     BOOL SetRowHeight(int row, int height);//设置行高
  42.     
  43. int  GetColumnWidth(int nCol) const;//列宽
  44.     BOOL SetColumnWidth(int col, int width);//..
  45. int  GetFixedRowHeight() const;
  46.     int  GetFixedColumnWidth() const;
  47. long GetVirtualWidth() const;
  48.     long GetVirtualHeight() const;
  49. //关于操作
  50. BOOL IsValid(int nRow, int nCol) const;//合法性检验
  51.     BOOL IsValid(const CCellID& cell) const;
  52.     BOOL IsValid(const CCellRange& range) const;
  53. BOOL IsCellVisible(int nRow, int nCol);
  54.     BOOL IsCellVisible(CCellID cell);
  55. BOOL GetCellOrigin(int nRow, int nCol, LPPOINT p);
  56.     BOOL GetCellOrigin(const CCellID& cell, LPPOINT p);
  57. BOOL GetCellRect(int nRow, int nCol, LPRECT pRect);
  58.     BOOL GetCellRect(const CCellID& cell, LPRECT pRect);
  59.     BOOL MouseOverColumnResizeArea(CPoint& point);
  60. void ClearCells();
  61. CCellID GetCellFromPt(CPoint point, BOOL bAllowFixedCellCheck = TRUE);//从鼠标点得到单元格ID
  62. CGridCellBase* GetCell(int nRow, int nCol) const;   // Get the actual cell!
  63. void Refresh();
  64. //排序:
  65. virtual void  OnFixedRowClick(CCellID& cell);
  66. BOOL SortItems(int nCol, BOOL bAscending, LPARAM data = 0);
  67.     BOOL SortTextItems(int nCol, BOOL bAscending, LPARAM data = 0);
  68.     BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data = 0);
  69.     BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data,
  70.                    int low, int high);
  71. // in-built sort functions 内联排序函数
  72. static int CALLBACK pfnCellTextCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
  73. static int CALLBACK pfnCellNumericCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
  74. void SetSortColumn(int nCol);//设置排序的列
  75. int  GetSortColumn() const                    { return m_nSortColumn;             }
  76. BOOL GetSortAscending() const                 { return m_bAscending;              }
  77. void SetSortAscending(BOOL bAscending)        { m_bAscending = bAscending;        }
  78. // ***************************************************************************** //
  79.     // These have been deprecated. Use GetDefaultCell and then set the colors
  80.     void     SetTextColor(COLORREF clr)      { m_cellDefault.SetTextClr(clr);        }
  81.     COLORREF GetTextColor()                  { return m_cellDefault.GetTextClr();    }
  82.     void     SetTextBkColor(COLORREF clr)    { m_cellDefault.SetBackClr(clr);        }
  83.     COLORREF GetTextBkColor()                { return m_cellDefault.GetBackClr();    }
  84.     void     SetFixedTextColor(COLORREF clr) { m_cellFixedRowDef.SetTextClr(clr); 
  85.                                                m_cellFixedColDef.SetTextClr(clr); 
  86.                                                m_cellFixedRowColDef.SetTextClr(clr); }
  87.     COLORREF GetFixedTextColor() const       { return m_cellFixedRowDef.GetTextClr(); }
  88.     void     SetFixedBkColor(COLORREF clr)   { m_cellFixedRowDef.SetBackClr(clr); 
  89.                                                m_cellFixedColDef.SetBackClr(clr); 
  90.                                                m_cellFixedRowColDef.SetBackClr(clr); }
  91. void     SetGridBkColor(COLORREF clr)         { m_crGridBkColour = clr;           }
  92.     COLORREF GetGridBkColor() const               { return m_crGridBkColour;          }
  93. //    BOOL GetFixedColumnSelection()                { return m_bFixedColumnSelection;   }
  94. BOOL   SetItemText(int nRow, int nCol, LPCTSTR str);
  95. BOOL   SetItemState(int nRow, int nCol, UINT state);
  96.     UINT   GetItemState(int nRow, int nCol) const;
  97. BOOL   SetItemBkColor(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
  98.     COLORREF GetItemBkColor(int nRow, int nCol) const;
  99.     BOOL   SetItemFgColor(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
  100.     COLORREF GetItemFgColor(int nRow, int nCol) const;
  101. // Operations
  102. public:
  103. // Overrides
  104. // ClassWizard generated virtual function overrides
  105. //{{AFX_VIRTUAL(CGridCtrl)
  106. public:
  107. virtual CScrollBar* GetScrollBarCtrl(int nBar) const;
  108. //}}AFX_VIRTUAL
  109. // Implementation
  110. public:
  111. virtual ~CGridCtrl();
  112. CUIntArray  m_arRowHeights, m_arColWidths;
  113. public:
  114. void EraseBkgnd(CDC* pDC);
  115. void OnDraw(CDC* pDC);
  116. BOOL RedrawCell(int nRow, int nCol, CDC* pDC = NULL);
  117.     BOOL RedrawCell(const CCellID& cell, CDC* pDC = NULL);
  118. BOOL RedrawRow(int row);
  119.     CGridCellBase* GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const;
  120. // Generated message map functions
  121. protected:
  122. //{{AFX_MSG(CGridCtrl)
  123. afx_msg void OnPaint();
  124. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  125. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  126. afx_msg void OnSize(UINT nType, int cx, int cy);
  127. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  128. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  129. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  130. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  131. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  132. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  133. afx_msg void OnTimer(UINT nIDEvent);
  134. afx_msg void OnDestroy();
  135. //}}AFX_MSG
  136. DECLARE_MESSAGE_MAP()
  137. protected:
  138. CRect m_FillRect;//高亮显示按钮位置
  139. CString m_shstr,m_szstr,m_bkstr,m_zxstr,m_qtstr,m_tjstr;
  140. // General attributes
  141.     COLORREF    m_crFixedTextColour, m_crFixedBkColour;
  142.     COLORREF    m_crGridBkColour, m_crGridLineColour;
  143.     COLORREF    m_crWindowText, m_crWindowColour, m_cr3DFace,     // System colours
  144.                 m_crShadow;
  145. BOOL        m_bDoubleBuffer;
  146. BOOL        m_bSortOnClick;
  147. // Cell size details
  148.     int  m_nRows, m_nFixedRows, m_nCols, m_nFixedCols;//总行数/固定行数/总列数/固定列数
  149. int         m_nVScrollMax, m_nHScrollMax;//滚动条最大值
  150. int         m_nBarState;//滚动状态
  151. int  m_nGridLines;//表格线
  152. BOOL        m_bAllowColHide, m_bAllowRowHide;
  153. //Mouse operations such as cell selection
  154. CCellID     m_LeftClickDownCell, m_SelectionStartCell,m_SelectedCell;
  155.     CCellID     m_idCurrentCell, m_idTopLeftCell;//当前单元格ID,左上角单元格ID
  156. // Fonts and images
  157.     CRuntimeClass*   m_pRtcDefault; // determines kind of Grid Cell created by default
  158.     CGridDefaultCell m_cellDefault;  // "default" cell. Contains default colours, font etc.
  159.     CGridDefaultCell m_cellFixedColDef, m_cellFixedRowDef, m_cellFixedRowColDef;
  160. // Cell data
  161.     CTypedPtrArray<CObArray, GRID_ROW*> m_RowData;
  162. // Mouse operations such as cell selection
  163. //    int         m_MouseMode;
  164.     BOOL        m_bLMouseButtonDown, m_bRMouseButtonDown;
  165.     CPoint      m_LeftClickDownPoint, m_LastMousePoint;
  166.     int         m_nTimerID;
  167.     int         m_nTimerInterval;
  168.     int         m_nResizeCaptureRange;
  169.     BOOL        m_bAllowRowResize, m_bAllowColumnResize;
  170.     int         m_nRowsPerWheelNotch;
  171. BOOL        m_bColSizing;//改变列大小
  172. BOOL        m_bAllowDraw;
  173. // BOOL        m_bFixedRowSelection, m_bFixedColumnSelection;
  174. // sorting
  175.     int         m_bAscending;
  176. int         m_nSortColumn;
  177. PFNLVCOMPARE m_pfnCompare;//排序函数的指针
  178. protected:
  179. void SetupDefaultCells();
  180. //关于滚动条:
  181. void ResetScrollBars();//重值滚动条
  182. void EnableScrollBars(int nBar, BOOL bEnable = TRUE);//允许有滚动条
  183.     BOOL IsVisibleVScroll() { return ( (m_nBarState & GVL_VERT) > 0); } //??
  184.     BOOL IsVisibleHScroll() { return ( (m_nBarState & GVL_HORZ) > 0); } //??
  185. int  GetScrollPos32(int nBar, BOOL bGetTrackPos = FALSE);//得到滚动指针
  186.     BOOL SetScrollPos32(int nBar, int nPos, BOOL bRedraw = TRUE);//设置滚动指针
  187. // CGridCellBase Creation and Cleanup
  188.     virtual CGridCellBase* CreateCell(int nRow, int nCol);
  189. virtual void DestroyCell(int nRow, int nCol);
  190. BOOL SetCell(int nRow, int nCol, CGridCellBase* pCell);
  191. CCellID GetTopleftNonFixedCell(BOOL bForceRecalculation = FALSE);//得到左上角非固定单元格
  192. CCellRange GetVisibleNonFixedCellRange(LPRECT pRect = NULL, BOOL bForceRecalculation = FALSE);//可见部分单元格范围
  193. };
  194. // Returns the default cell implementation for the given grid region
  195. inline CGridCellBase* CGridCtrl::GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const
  196.     //三个返回对象都是CGridDefaultCell的变量,只是初始化时对颜色设了不同值.
  197. //
  198. if (bFixedRow && bFixedCol) return (CGridCellBase*) &m_cellFixedRowColDef;
  199.     if (bFixedRow)              return (CGridCellBase*) &m_cellFixedRowDef;
  200.     if (bFixedCol)              return (CGridCellBase*) &m_cellFixedColDef;
  201.     return (CGridCellBase*) &m_cellDefault;
  202. }
  203. inline CGridCellBase* CGridCtrl::GetCell(int nRow, int nCol) const
  204. {
  205. //这个函数返回Grid中一个Cell的指针:
  206.     
  207. if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols)//如果传进来的行列号非法
  208. return NULL;                                               //就返回空
  209.     GRID_ROW* pRow = m_RowData[nRow];
  210.     if (!pRow) return NULL;
  211.     return pRow->GetAt(nCol);//传回数组中的一个元素
  212. }
  213. inline BOOL CGridCtrl::SetCell(int nRow, int nCol, CGridCellBase* pCell)
  214. {
  215. //    if (GetVirtualMode())
  216. //        return FALSE;
  217.     if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) 
  218.         return FALSE;
  219.     GRID_ROW* pRow = m_RowData[nRow];
  220.     if (!pRow) return FALSE;
  221. //    pCell->SetCoords( nRow, nCol); 
  222.     pRow->SetAt(nCol, pCell);
  223.     return TRUE;
  224. }
  225. /////////////////////////////////////////////////////////////////////////////
  226. //{{AFX_INSERT_LOCATION}}
  227. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  228. #endif // !defined(AFX_GRIDCTRL_H__768A7058_3D28_11D8_B617_A69FB0BE0671__INCLUDED_)