CellRange.h
上传用户:jzscgs158
上传日期:2022-05-25
资源大小:8709k
文件大小:5k
源码类别:

百货/超市行业

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////
  2. // CellRange.h: header file
  3. //
  4. // MFC Grid Control - interface for the CCellRange class.
  5. //
  6. // Written by Chris Maunder <cmaunder@mail.com>
  7. // Copyright (c) 1998-2000. All Rights Reserved.
  8. //
  9. // This code may be used in compiled form in any way you desire. This
  10. // file may be redistributed unmodified by any means PROVIDING it is 
  11. // not sold for profit without the authors written consent, and 
  12. // providing that this notice and the authors name and all copyright 
  13. // notices remains intact. 
  14. //
  15. // An email letting me know how you are using it would be nice as well. 
  16. //
  17. // This file is provided "as is" with no expressed or implied warranty.
  18. // The author accepts no liability for any damage/loss of business that
  19. // this product may cause.
  20. //
  21. // For use with CGridCtrl v2.20
  22. //
  23. //////////////////////////////////////////////////////////////////////
  24. #if !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_)
  25. #define AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_
  26. #if _MSC_VER >= 1000
  27. #pragma once
  28. #endif // _MSC_VER >= 1000
  29. // The code contained in this file is based on the original
  30. // WorldCom Grid control written by Joe Willcoxson,
  31. //      mailto:chinajoe@aol.com
  32. //      http://users.aol.com/chinajoe
  33. // Download by http://www.codefans.net
  34. class CCellID
  35. {    
  36. // Attributes
  37. public:
  38.     int row, col;
  39. // Download by http://www.codefans.net
  40. // Operations
  41. public:
  42.     CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {}
  43.     int IsValid() const { return (row >= 0 && col >= 0); }
  44.     int operator==(const CCellID& rhs)    { return (row == rhs.row && col == rhs.col); }
  45.     int operator!=(const CCellID& rhs)    { return !operator==(rhs); }
  46. };
  47. class CCellRange
  48. public:
  49.     
  50.     CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1)
  51.     {
  52.         Set(nMinRow, nMinCol, nMaxRow, nMaxCol);
  53.     }
  54.     void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1);
  55.     
  56.     int  IsValid() const;
  57.     int  InRange(int row, int col) const;
  58.     int  InRange(const CCellID& cellID) const;
  59.     int  Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); }
  60.     
  61.     CCellID  GetTopLeft() const;
  62.     CCellRange  Intersect(const CCellRange& rhs) const;
  63.     
  64.     int GetMinRow() const {return m_nMinRow;}
  65.     void SetMinRow(int minRow) {m_nMinRow = minRow;}
  66.     
  67.     int GetMinCol() const {return m_nMinCol;}
  68.     void SetMinCol(int minCol) {m_nMinCol = minCol;}
  69.     
  70.     int GetMaxRow() const {return m_nMaxRow;}
  71.     void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;}
  72.     
  73.     int GetMaxCol() const {return m_nMaxCol;}
  74.     void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;}
  75.     int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;}
  76.     int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;}
  77.     
  78.     void operator=(const CCellRange& rhs);
  79.     int  operator==(const CCellRange& rhs);
  80.     int  operator!=(const CCellRange& rhs);
  81.     
  82. protected:
  83.     int m_nMinRow;
  84.     int m_nMinCol;
  85.     int m_nMaxRow;
  86.     int m_nMaxCol;
  87. };
  88. inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol)
  89. {
  90.      m_nMinRow = minRow;
  91.      m_nMinCol = minCol;
  92.      m_nMaxRow = maxRow;
  93.      m_nMaxCol = maxCol;
  94. }
  95. inline void CCellRange::operator=(const CCellRange& rhs)
  96. {
  97.     Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol);
  98. }
  99. inline int CCellRange::operator==(const CCellRange& rhs)
  100. {
  101.      return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) &&
  102.              (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol));
  103. }
  104. inline int CCellRange::operator!=(const CCellRange& rhs)
  105. {
  106.      return !operator==(rhs);
  107. }
  108. inline int CCellRange::IsValid() const
  109. {
  110.      return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 &&
  111.              m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol);
  112. }
  113. inline int CCellRange::InRange(int row, int col) const
  114. {
  115.      return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol);
  116. }
  117. inline int CCellRange::InRange(const CCellID& cellID) const
  118. {
  119.      return InRange(cellID.row, cellID.col);
  120. }
  121. inline CCellID CCellRange::GetTopLeft() const
  122. {
  123.      return CCellID(m_nMinRow, m_nMinCol);
  124. }
  125. inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const
  126. {
  127.      return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol),
  128.                        min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol));
  129. }
  130. #endif // !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_)