CELLRANGE.H
上传用户:asikq0571
上传日期:2014-07-12
资源大小:528k
文件大小:4k
源码类别:

Internet/IE编程

开发平台:

Visual C++

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