새 파일 |
| | |
| | | /////////////////////////////////////////////////////////////////////// |
| | | // CellRange.h: header file |
| | | // |
| | | // MFC Grid Control - interface for the CCellRange class. |
| | | // |
| | | // Written by Chris Maunder <cmaunder@mail.com> |
| | | // Copyright (c) 1998-2002. All Rights Reserved. |
| | | // |
| | | // This code may be used in compiled form in any way you desire. This |
| | | // file may be redistributed unmodified by any means PROVIDING it is |
| | | // not sold for profit without the authors written consent, and |
| | | // providing that this notice and the authors name and all copyright |
| | | // notices remains intact. |
| | | // |
| | | // An email letting me know how you are using it would be nice as well. |
| | | // |
| | | // This file is provided "as is" with no expressed or implied warranty. |
| | | // The author accepts no liability for any damage/loss of business that |
| | | // this product may cause. |
| | | // |
| | | // For use with CGridCtrl v2.20+ |
| | | // |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | | #if !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) |
| | | #define AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_ |
| | | |
| | | #if _MSC_VER >= 1000 |
| | | #pragma once |
| | | #endif // _MSC_VER >= 1000 |
| | | |
| | | // The code contained in this file is based on the original |
| | | // WorldCom Grid control written by Joe Willcoxson, |
| | | // mailto:chinajoe@aol.com |
| | | // http://users.aol.com/chinajoe |
| | | |
| | | class CCellID |
| | | { |
| | | // Attributes |
| | | public: |
| | | int row, col; |
| | | |
| | | // Operations |
| | | public: |
| | | explicit CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {} |
| | | |
| | | int IsValid() const { return (row >= 0 && col >= 0); } |
| | | int operator==(const CCellID& rhs) const { return (row == rhs.row && col == rhs.col); } |
| | | int operator!=(const CCellID& rhs) const { return !operator==(rhs); } |
| | | }; |
| | | |
| | | class CCellRange |
| | | { |
| | | public: |
| | | |
| | | CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1) |
| | | { |
| | | Set(nMinRow, nMinCol, nMaxRow, nMaxCol); |
| | | } |
| | | |
| | | void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1); |
| | | |
| | | int IsValid() const; |
| | | int InRange(int row, int col) const; |
| | | int InRange(const CCellID& cellID) const; |
| | | int Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); } |
| | | |
| | | CCellID GetTopLeft() const; |
| | | CCellRange Intersect(const CCellRange& rhs) const; |
| | | |
| | | int GetMinRow() const {return m_nMinRow;} |
| | | void SetMinRow(int minRow) {m_nMinRow = minRow;} |
| | | |
| | | int GetMinCol() const {return m_nMinCol;} |
| | | void SetMinCol(int minCol) {m_nMinCol = minCol;} |
| | | |
| | | int GetMaxRow() const {return m_nMaxRow;} |
| | | void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;} |
| | | |
| | | int GetMaxCol() const {return m_nMaxCol;} |
| | | void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;} |
| | | |
| | | int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;} |
| | | int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;} |
| | | |
| | | void operator=(const CCellRange& rhs); |
| | | int operator==(const CCellRange& rhs); |
| | | int operator!=(const CCellRange& rhs); |
| | | |
| | | protected: |
| | | int m_nMinRow; |
| | | int m_nMinCol; |
| | | int m_nMaxRow; |
| | | int m_nMaxCol; |
| | | }; |
| | | |
| | | inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol) |
| | | { |
| | | m_nMinRow = minRow; |
| | | m_nMinCol = minCol; |
| | | m_nMaxRow = maxRow; |
| | | m_nMaxCol = maxCol; |
| | | } |
| | | |
| | | inline void CCellRange::operator=(const CCellRange& rhs) |
| | | { |
| | | if (this != &rhs) Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol); |
| | | } |
| | | |
| | | inline int CCellRange::operator==(const CCellRange& rhs) |
| | | { |
| | | return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) && |
| | | (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol)); |
| | | } |
| | | |
| | | inline int CCellRange::operator!=(const CCellRange& rhs) |
| | | { |
| | | return !operator==(rhs); |
| | | } |
| | | |
| | | inline int CCellRange::IsValid() const |
| | | { |
| | | return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 && |
| | | m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol); |
| | | } |
| | | |
| | | inline int CCellRange::InRange(int row, int col) const |
| | | { |
| | | return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol); |
| | | } |
| | | |
| | | inline int CCellRange::InRange(const CCellID& cellID) const |
| | | { |
| | | return InRange(cellID.row, cellID.col); |
| | | } |
| | | |
| | | inline CCellID CCellRange::GetTopLeft() const |
| | | { |
| | | return CCellID(m_nMinRow, m_nMinCol); |
| | | } |
| | | |
| | | inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const |
| | | { |
| | | return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol), |
| | | min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol)); |
| | | } |
| | | |
| | | #endif // !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) |