#pragma once #include #include "CellRange.h" // Added by ClassView class CGridCtrl; // Cell states #define GVIS_FOCUSED 0x0001 #define GVIS_SELECTED 0x0002 #define GVIS_DROPHILITED 0x0004 #define GVIS_READONLY 0x0008 #define GVIS_FIXED 0x0010 #define GVIS_FIXEDROW 0x0020 #define GVIS_FIXEDCOL 0x0040 #define GVIS_MODIFIED 0x0080 // Cell data mask #define GVIF_TEXT LVIF_TEXT #define GVIF_IMAGE LVIF_IMAGE #define GVIF_PARAM LVIF_PARAM #define GVIF_STATE LVIF_STATE #define GVIF_BKCLR (GVIF_STATE<<1) #define GVIF_FGCLR (GVIF_STATE<<2) #define GVIF_FORMAT (GVIF_STATE<<3) #define GVIF_FONT (GVIF_STATE<<4) #define GVIF_MARGIN (GVIF_STATE<<5) #define GVIF_BORDER (GVIF_STATE<<6) // BORDER #define GVIF_BORDERCLR (GVIF_STATE<<7) // BORDER CLR #define GVIF_ALL (GVIF_TEXT|GVIF_IMAGE|GVIF_PARAM|GVIF_STATE|GVIF_BKCLR|GVIF_FGCLR| \ GVIF_FORMAT|GVIF_FONT|GVIF_MARGIN|GVIF_BORDER) // CELL Border States #define GVIS_BDR_TOP 0X0001 #define GVIS_BDR_RIGHT 0x0002 #define GVIS_BDR_BOTTOM 0x0004 #define GVIS_BDR_LEFT 0x0008 // Used for Get/SetItem calls. typedef struct _GV_ITEM { int row, col; // Row and Column of item UINT mask; // Mask for use in getting/setting cell data UINT nState; // cell state (focus/hilighted etc) DWORD nFormat; // Format of cell int iImage; // index of the list view item’s icon COLORREF crBkClr; // Background colour (or CLR_DEFAULT) COLORREF crFgClr; // Forground colour (or CLR_DEFAULT) UINT nBorder; // Border COLORREF crBorderClr; // Border Color LPARAM lParam; // 32-bit value to associate with item LOGFONT lfFont; // Cell font UINT nMargin; // Internal cell margin CString strText; // Text in cell } GV_ITEM; // Each cell contains one of these. Fields "row" and "column" are not stored since we // will usually have acces to them in other ways, and they are an extra 8 bytes per // cell that is probably unnecessary. class CGridCellBase : public CObject { friend class CGridCtrl; DECLARE_DYNAMIC(CGridCellBase) // Construction/Destruction public: CGridCellBase(); virtual ~CGridCellBase(); // Attributes public: virtual void SetText(LPCTSTR /* szText */) = 0; virtual void SetImage(int /* nImage */) = 0; virtual void SetData(LPARAM /* lParam */) = 0; virtual void SetState(DWORD nState) { m_nState = nState; } virtual void SetFormat(DWORD /* nFormat */) = 0; virtual void SetTextClr(COLORREF /* clr */) = 0; virtual void SetBackClr(COLORREF /* clr */) = 0; virtual void SetFont(const LOGFONT* /* plf */) = 0; virtual void SetMargin(UINT /* nMargin */) = 0; virtual void SetGrid(CGridCtrl* /* pGrid */) = 0; virtual void SetCoords(int /* nRow */, int /* nCol */) = 0; /*************************************************/ virtual void SetBorderClr(COLORREF /* clr */) = 0; virtual void SetBorder(UINT /* BdrState */) = 0; virtual COLORREF GetBorderClr() const = 0; virtual UINT GetBorder() const = 0; /*************************************************/ virtual LPCTSTR GetText() const = 0; virtual LPCTSTR GetTipText() const { return GetText(); } // may override TitleTip return virtual int GetImage() const = 0; virtual LPARAM GetData() const = 0; virtual DWORD GetState() const { return m_nState; } virtual DWORD GetFormat() const = 0; virtual COLORREF GetTextClr() const = 0; virtual COLORREF GetBackClr() const = 0; virtual LOGFONT * GetFont() const = 0; virtual CFont * GetFontObject() const = 0; virtual CGridCtrl* GetGrid() const = 0; virtual CWnd * GetEditWnd() const = 0; virtual UINT GetMargin() const = 0; virtual CGridCellBase* GetDefaultCell() const; virtual BOOL IsDefaultFont() const = 0; virtual BOOL IsEditing() const = 0; virtual BOOL IsFocused() const { return (m_nState & GVIS_FOCUSED); } virtual BOOL IsFixed() const { return (m_nState & GVIS_FIXED); } virtual BOOL IsFixedCol() const { return (m_nState & GVIS_FIXEDCOL); } virtual BOOL IsFixedRow() const { return (m_nState & GVIS_FIXEDROW); } virtual BOOL IsSelected() const { return (m_nState & GVIS_SELECTED); } virtual BOOL IsReadOnly() const { return (m_nState & GVIS_READONLY); } virtual BOOL IsModified() const { return (m_nState & GVIS_MODIFIED); } virtual BOOL IsDropHighlighted() const { return (m_nState & GVIS_DROPHILITED); } // Operators public: virtual void operator=(CGridCellBase& cell); // Operations public: bool IsMerged(); void SetMergeRange(CCellRange range); void Show(bool IsShow); virtual void Reset(); virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); virtual BOOL GetTextRect(LPRECT pRect); // i/o: i=dims of cell rect; o=dims of text rect virtual BOOL GetTipTextRect(LPRECT pRect) { return GetTextRect(pRect); } // may override for btns, etc. virtual CSize GetTextExtent(LPCTSTR str, CDC* pDC = NULL); virtual CSize GetCellExtent(CDC* pDC); // Editing virtual BOOL Edit(int /* nRow */, int /* nCol */, CRect /* rect */, CPoint /* point */, UINT /* nID */, UINT /* nChar */) { ASSERT(FALSE); return FALSE; } virtual BOOL ValidateEdit(LPCTSTR str); virtual void EndEdit() {} // EFW - Added to print cells properly virtual BOOL PrintCell(CDC* pDC, int nRow, int nCol, CRect rect); // add additional protected grid members required of cells LRESULT SendMessageToParent(int nRow, int nCol, int nMessage); protected: virtual void OnEndEdit(); virtual void OnMouseEnter(); virtual void OnMouseOver(); virtual void OnMouseLeave(); virtual void OnClick(CPoint PointCellRelative); virtual void OnClickDown(CPoint PointCellRelative); virtual void OnRClick(CPoint PointCellRelative); virtual void OnDblClick(CPoint PointCellRelative); virtual BOOL OnSetCursor(); public: void UnMerge(); virtual bool IsShow(); virtual CCellRange GetMergeRange(); virtual bool IsMergeWithOthers(); virtual CCellID GetMergeCellID(); virtual void SetMergeCellID(CCellID cell); protected: DWORD m_nState; // Cell state (selected/focus etc) private: CCellRange m_MergeRange; bool m_IsMergeWithOthers; CCellID m_MergeCellID; bool m_Hide; };