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

金融证券系统

开发平台:

Visual C++

  1. // CellRange.h: interface for the CCellRange class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_CELLRANGE_H__768A705A_3D28_11D8_B617_A69FB0BE0671__INCLUDED_)
  5. #define AFX_CELLRANGE_H__768A705A_3D28_11D8_B617_A69FB0BE0671__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. class CCellID
  10. {    
  11. // Attributes
  12. public:
  13.     int row, col;
  14. // Operations
  15. public:
  16.     explicit CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {}
  17.     int IsValid() const { return (row >= 0 && col >= 0); }
  18.     int operator==(const CCellID& rhs) const { return (row == rhs.row && col == rhs.col); }
  19.     int operator!=(const CCellID& rhs) const { return !operator==(rhs); }
  20. };
  21. class CCellRange  
  22. {
  23. public:
  24. CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1)
  25.     {
  26.         Set(nMinRow, nMinCol, nMaxRow, nMaxCol);
  27.     }
  28.     void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1);
  29.     
  30.     int  IsValid() const;
  31.     int  InRange(int row, int col) const;
  32.     int  InRange(const CCellID& cellID) const;
  33.     int  Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); }
  34.     
  35.     CCellID  GetTopLeft() const;
  36.     CCellRange  Intersect(const CCellRange& rhs) const;
  37.     
  38.     int GetMinRow() const {return m_nMinRow;}
  39.     void SetMinRow(int minRow) {m_nMinRow = minRow;}
  40.     
  41.     int GetMinCol() const {return m_nMinCol;}
  42.     void SetMinCol(int minCol) {m_nMinCol = minCol;}
  43.     
  44.     int GetMaxRow() const {return m_nMaxRow;}
  45.     void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;}
  46.     
  47.     int GetMaxCol() const {return m_nMaxCol;}
  48.     void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;}
  49.     int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;}
  50.     int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;}
  51.     
  52.     void operator=(const CCellRange& rhs);
  53.     int  operator==(const CCellRange& rhs);
  54.     int  operator!=(const CCellRange& rhs);
  55.     
  56. protected:
  57.     int m_nMinRow;
  58.     int m_nMinCol;
  59.     int m_nMaxRow;
  60.     int m_nMaxCol;
  61. };
  62. inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol)
  63. {
  64.      m_nMinRow = minRow;
  65.      m_nMinCol = minCol;
  66.      m_nMaxRow = maxRow;
  67.      m_nMaxCol = maxCol;
  68. }
  69. inline void CCellRange::operator=(const CCellRange& rhs)
  70. {
  71.     if (this != &rhs) Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol);
  72. }
  73. inline int CCellRange::operator==(const CCellRange& rhs)
  74. {
  75.      return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) &&
  76.              (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol));
  77. }
  78. inline int CCellRange::operator!=(const CCellRange& rhs)
  79. {
  80.      return !operator==(rhs);
  81. }
  82. inline int CCellRange::IsValid() const
  83. {
  84.      return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 &&
  85.              m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol);
  86. }
  87. inline int CCellRange::InRange(int row, int col) const
  88. {
  89.      return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol);
  90. }
  91. inline int CCellRange::InRange(const CCellID& cellID) const
  92. {
  93.      return InRange(cellID.row, cellID.col);
  94. }
  95. inline CCellID CCellRange::GetTopLeft() const
  96. {
  97.      return CCellID(m_nMinRow, m_nMinCol);
  98. }
  99. inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const
  100. {
  101.      return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol),
  102.                        min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol));
  103. }
  104. #endif // !defined(AFX_CELLRANGE_H__768A705A_3D28_11D8_B617_A69FB0BE0671__INCLUDED_)