From 572aebd50409d2f11183d6ebbb9d12fe9041e7a5 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 화, 17 8월 2021 18:47:48 +0900
Subject: [PATCH] Ongoing100 #3561 CF AOI Review Align 카메라 끊김 현상 조치

---
 ReviewHistory/include/akGridCtrl/akGridCtrl.h |  925 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 925 insertions(+), 0 deletions(-)

diff --git a/ReviewHistory/include/akGridCtrl/akGridCtrl.h b/ReviewHistory/include/akGridCtrl/akGridCtrl.h
new file mode 100644
index 0000000..472b7f4
--- /dev/null
+++ b/ReviewHistory/include/akGridCtrl/akGridCtrl.h
@@ -0,0 +1,925 @@
+//
+//////////////////////////////////////////////////////////////////////////
+//이 모듈은 Chris Maunder가 제작한 것을 수정 보안한 그리드 컨트롤 입니다.
+//
+//
+/*
+사용방법
+1. 리소스 창에 커스텀 컨트롤 생성
+2. 생성한 커스텀컨트롤 -> 속성 -> Class에 akGridCtrl 입력
+3. CGridCtrl 클래스로 컨트롤 변수 등록
+*/
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCtrl.h : header file
+//
+// MFC Grid Control - main header
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. 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_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+#include "akGridCtrlLinker.h"
+#include "CellRange.h"
+#include "GridCell.h"
+#include <afxtempl.h>
+#include <vector>
+
+
+///////////////////////////////////////////////////////////////////////////////////
+// Defines - these determine the features (and the final size) of the final code
+///////////////////////////////////////////////////////////////////////////////////
+
+//#define GRIDCONTROL_NO_TITLETIPS   // Do not use titletips for cells with large data
+//#define GRIDCONTROL_NO_DRAGDROP    // Do not use OLE drag and drop
+//#define GRIDCONTROL_NO_CLIPBOARD   // Do not use clipboard routines
+
+#ifdef _WIN32_WCE
+#   define GRIDCONTROL_NO_TITLETIPS   // Do not use titletips for cells with large data
+#   define GRIDCONTROL_NO_DRAGDROP    // Do not use OLE drag and drop
+#   define GRIDCONTROL_NO_CLIPBOARD   // Do not use clipboard routines
+#   define GRIDCONTROL_NO_PRINTING    // Do not use printing routines
+#   ifdef WCE_NO_PRINTING			  // Older versions of CE had different #def's
+#       define _WIN32_WCE_NO_PRINTING
+#   endif
+#   ifdef WCE_NO_CURSOR
+#       define _WIN32_WCE_NO_CURSOR
+#   endif
+#endif  // _WIN32_WCE
+
+// Use this as the classname when inserting this control as a custom control
+// in the MSVC++ dialog editor
+#define GRIDCTRL_CLASSNAME    _T("akGridCtrl")  // Window class name
+#define IDC_INPLACE_CONTROL   8                  // ID of inplace edit controls
+
+
+///////////////////////////////////////////////////////////////////////////////////
+// Conditional includes
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GRIDCONTROL_NO_TITLETIPS
+#   include "TitleTip.h"
+#endif
+
+#ifndef GRIDCONTROL_NO_DRAGDROP
+#   include "GridDropTarget.h"
+#   undef GRIDCONTROL_NO_CLIPBOARD     // Force clipboard functions on
+#endif
+
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+#   include <afxole.h>
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////////
+// Helper functions
+///////////////////////////////////////////////////////////////////////////////////
+
+// Handy functions
+#define IsSHIFTpressed() ( (GetKeyState(VK_SHIFT) & (1 << (sizeof(SHORT)*8-1))) != 0   )
+#define IsCTRLpressed()  ( (GetKeyState(VK_CONTROL) & (1 << (sizeof(SHORT)*8-1))) != 0 )
+
+// Backwards compatibility for pre 2.20 grid versions
+#define DDX_GridControl(pDX, nIDC, rControl)  DDX_Control(pDX, nIDC, rControl)     
+
+
+///////////////////////////////////////////////////////////////////////////////////
+// Structures
+///////////////////////////////////////////////////////////////////////////////////
+
+// This structure sent to Grid's parent in a WM_NOTIFY message
+typedef struct AFX_EXT_CLASS tagNM_GRIDVIEW {
+    NMHDR hdr;
+    int   iRow;
+    int   iColumn;
+} NM_GRIDVIEW;
+
+// This is sent to the Grid from child in-place edit controls
+typedef struct AFX_EXT_CLASS tagGV_DISPINFO {
+    NMHDR   hdr;
+    GV_ITEM item;
+} GV_DISPINFO;
+
+// This is sent to the Grid from child in-place edit controls
+typedef struct AFX_EXT_CLASS tagGV_CACHEHINT {
+    NMHDR      hdr;
+    CCellRange range;
+} GV_CACHEHINT;
+
+// storage typedef for each row in the grid
+typedef CTypedPtrArray<CObArray, CGridCellBase*> GRID_ROW;
+
+// For virtual mode callback
+typedef BOOL (CALLBACK* GRIDCALLBACK)(GV_DISPINFO *, LPARAM);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Defines
+///////////////////////////////////////////////////////////////////////////////////
+
+// Grid line/scrollbar selection
+#define GVL_NONE                0L      // Neither
+#define GVL_HORZ                1L      // Horizontal line or scrollbar
+#define GVL_VERT                2L      // Vertical line or scrollbar
+#define GVL_BOTH                3L      // Both
+
+// Autosizing option
+#define GVS_DEFAULT             0
+#define GVS_HEADER              1       // Size using column fixed cells data only
+#define GVS_DATA                2       // Size using column non-fixed cells data only
+#define GVS_BOTH                3       // Size using column fixed and non-fixed
+
+// Cell Searching options
+#define GVNI_FOCUSED            0x0001
+#define GVNI_SELECTED           0x0002
+#define GVNI_DROPHILITED        0x0004
+#define GVNI_READONLY           0x0008
+#define GVNI_FIXED              0x0010
+#define GVNI_MODIFIED           0x0020
+
+#define GVNI_ABOVE              LVNI_ABOVE
+#define GVNI_BELOW              LVNI_BELOW
+#define GVNI_TOLEFT             LVNI_TOLEFT
+#define GVNI_TORIGHT            LVNI_TORIGHT
+#define GVNI_ALL                (LVNI_BELOW|LVNI_TORIGHT|LVNI_TOLEFT)
+#define GVNI_AREA               (LVNI_BELOW|LVNI_TORIGHT)
+
+// Hit test values (not yet implemented)
+#define GVHT_DATA               0x0000
+#define GVHT_TOPLEFT            0x0001
+#define GVHT_COLHDR             0x0002
+#define GVHT_ROWHDR             0x0004
+#define GVHT_COLSIZER           0x0008
+#define GVHT_ROWSIZER           0x0010
+#define GVHT_LEFT               0x0020
+#define GVHT_RIGHT              0x0040
+#define GVHT_ABOVE              0x0080
+#define GVHT_BELOW              0x0100
+
+// Messages sent to the grid's parent (More will be added in future)
+#define GVN_BEGINDRAG           LVN_BEGINDRAG        // LVN_FIRST-9
+#define GVN_BEGINLABELEDIT      LVN_BEGINLABELEDIT   // LVN_FIRST-5
+#define GVN_BEGINRDRAG          LVN_BEGINRDRAG
+#define GVN_COLUMNCLICK         LVN_COLUMNCLICK
+#define GVN_DELETEITEM          LVN_DELETEITEM
+#define GVN_ENDLABELEDIT        LVN_ENDLABELEDIT     // LVN_FIRST-6
+#define GVN_SELCHANGING         LVN_ITEMCHANGING
+#define GVN_SELCHANGED          LVN_ITEMCHANGED
+#define GVN_GETDISPINFO         LVN_GETDISPINFO 
+#define GVN_ODCACHEHINT         LVN_ODCACHEHINT 
+
+class CakGridCtrl;
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridCtrl window
+
+typedef bool (*PVIRTUALCOMPARE)(int, int);
+
+class AFX_EXT_CLASS CakGridCtrl : public CWnd
+{
+    DECLARE_DYNCREATE(CakGridCtrl)
+    friend class CGridCell;
+    friend class CGridCellBase;
+
+// Construction
+public:
+    CakGridCtrl(int nRows = 0, int nCols = 0, int nFixedRows = 0, int nFixedCols = 0);
+
+    BOOL Create(const RECT& rect, CWnd* parent, UINT nID,
+                DWORD dwStyle = WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Attributes
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    int  GetRowCount() const                    { return m_nRows; }
+    int  GetColumnCount() const                 { return m_nCols; }
+    int  GetFixedRowCount() const               { return m_nFixedRows; }
+    int  GetFixedColumnCount() const            { return m_nFixedCols; }
+    BOOL SetRowCount(int nRows = 10);
+    BOOL SetColumnCount(int nCols = 10);
+    BOOL SetFixedRowCount(int nFixedRows = 1);
+    BOOL SetFixedColumnCount(int nFixedCols = 1);
+
+    int  GetRowHeight(int nRow) const;
+    BOOL SetRowHeight(int row, int height);
+    int  GetColumnWidth(int nCol) const;
+    BOOL SetColumnWidth(int col, int width);
+
+    BOOL GetCellOrigin(int nRow, int nCol, LPPOINT p);
+    BOOL GetCellOrigin(const CCellID& cell, LPPOINT p);
+    BOOL GetCellRect(int nRow, int nCol, LPRECT pRect);
+    BOOL GetCellRect(const CCellID& cell, LPRECT pRect);
+
+    BOOL GetTextRect(const CCellID& cell, LPRECT pRect);
+    BOOL GetTextRect(int nRow, int nCol, LPRECT pRect);
+
+    CCellID GetCellFromPt(CPoint point, BOOL bAllowFixedCellCheck = TRUE);
+
+    int  GetFixedRowHeight() const;
+    int  GetFixedColumnWidth() const;
+    long GetVirtualWidth() const;
+    long GetVirtualHeight() const;
+
+    CSize GetTextExtent(int nRow, int nCol, LPCTSTR str);
+    // EFW - Get extent of current text in cell
+    inline CSize GetCellTextExtent(int nRow, int nCol)  { return GetTextExtent(nRow, nCol, GetItemText(nRow,nCol)); }
+
+    void     SetGridBkColor(COLORREF clr)         { m_crGridBkColour = clr;           }
+    COLORREF GetGridBkColor() const               { return m_crGridBkColour;          }
+    void     SetGridLineColor(COLORREF clr)       { m_crGridLineColour = clr;         }
+    COLORREF GetGridLineColor() const             { return m_crGridLineColour;        }
+
+	void	 SetTitleTipBackClr(COLORREF clr = CLR_DEFAULT) { m_crTTipBackClr = clr;  }
+	COLORREF GetTitleTipBackClr()				            { return m_crTTipBackClr; }
+	void	 SetTitleTipTextClr(COLORREF clr = CLR_DEFAULT) { m_crTTipTextClr = clr;  }
+	COLORREF GetTitleTipTextClr()				            { return m_crTTipTextClr; }
+
+    // ***************************************************************************** //
+    // These have been deprecated. Use GetDefaultCell and then set the colors
+    void     SetTextColor(COLORREF clr)      { m_cellDefault.SetTextClr(clr);        }
+    COLORREF GetTextColor()                  { return m_cellDefault.GetTextClr();    }
+    void     SetTextBkColor(COLORREF clr)    { m_cellDefault.SetBackClr(clr);        }
+    COLORREF GetTextBkColor()                { return m_cellDefault.GetBackClr();    }
+    void     SetFixedTextColor(COLORREF clr) { m_cellFixedRowDef.SetTextClr(clr); 
+                                               m_cellFixedColDef.SetTextClr(clr); 
+                                               m_cellFixedRowColDef.SetTextClr(clr); }
+    COLORREF GetFixedTextColor() const       { return m_cellFixedRowDef.GetTextClr(); }
+    void     SetFixedBkColor(COLORREF clr)   { m_cellFixedRowDef.SetBackClr(clr); 
+                                               m_cellFixedColDef.SetBackClr(clr); 
+                                               m_cellFixedRowColDef.SetBackClr(clr); }
+    COLORREF GetFixedBkColor() const         { return m_cellFixedRowDef.GetBackClr(); }
+    void     SetGridColor(COLORREF clr)      { SetGridLineColor(clr);                }
+    COLORREF GetGridColor()                  { return GetGridLineColor();            }
+    void     SetBkColor(COLORREF clr)        { SetGridBkColor(clr);                  }
+    COLORREF GetBkColor()                    { return GetGridBkColor();              }
+
+    void     SetDefCellMargin( int nMargin)  { m_cellDefault.SetMargin(nMargin); 
+                                               m_cellFixedRowDef.SetMargin(nMargin); 
+                                               m_cellFixedColDef.SetMargin(nMargin); 
+                                               m_cellFixedRowColDef.SetMargin(nMargin); }
+    int      GetDefCellMargin() const        { return m_cellDefault.GetMargin();     }
+
+    int      GetDefCellHeight() const        { return m_cellDefault.GetHeight();     }
+    void     SetDefCellHeight(int nHeight)   { m_cellDefault.SetHeight(nHeight); 
+                                               m_cellFixedRowDef.SetHeight(nHeight); 
+                                               m_cellFixedColDef.SetHeight(nHeight); 
+                                               m_cellFixedRowColDef.SetHeight(nHeight); }
+    int      GetDefCellWidth() const         { return m_cellDefault.GetWidth();     }
+    void     SetDefCellWidth(int nWidth)     { m_cellDefault.SetWidth(nWidth); 
+                                               m_cellFixedRowDef.SetWidth(nWidth); 
+                                               m_cellFixedColDef.SetWidth(nWidth); 
+                                               m_cellFixedRowColDef.SetWidth(nWidth); }
+
+    // ***************************************************************************** //
+
+    int GetSelectedCount() const                  { return (int)m_SelectedCellMap.GetCount(); }
+
+    CCellID SetFocusCell(CCellID cell);
+    CCellID SetFocusCell(int nRow, int nCol);
+    CCellID GetFocusCell() const                  { return m_idCurrentCell;           }
+
+
+    void SetVirtualMode(BOOL bVirtual);
+    BOOL GetVirtualMode() const                   { return m_bVirtualMode;            }
+    void SetCallbackFunc(GRIDCALLBACK pCallback, 
+                         LPARAM lParam)           { m_pfnCallback = pCallback; m_lParam = lParam; }
+    GRIDCALLBACK GetCallbackFunc()                { return m_pfnCallback;             }
+
+
+    void SetImageList(CImageList* pList)          { m_pImageList = pList;             }
+    CImageList* GetImageList() const              { return m_pImageList;              }
+
+    void SetGridLines(int nWhichLines = GVL_BOTH);
+    int  GetGridLines() const                     { return m_nGridLines;              }
+    void SetEditable(BOOL bEditable = TRUE)       { m_bEditable = bEditable;          }
+    BOOL IsEditable() const                       { return m_bEditable;               }
+    void SetListMode(BOOL bEnableListMode = TRUE);
+    BOOL GetListMode() const                      { return m_bListMode;               }
+    void SetSingleRowSelection(BOOL bSing = TRUE) { m_bSingleRowSelection = bSing;    }
+    BOOL GetSingleRowSelection()                  { return m_bSingleRowSelection & m_bListMode; }
+    void SetSingleColSelection(BOOL bSing = TRUE) { m_bSingleColSelection = bSing;    }
+    BOOL GetSingleColSelection()                  { return m_bSingleColSelection;     }
+    void EnableSelection(BOOL bEnable = TRUE)     { ResetSelectedRange(); m_bEnableSelection = bEnable; ResetSelectedRange(); }
+    BOOL IsSelectable() const                     { return m_bEnableSelection;        }
+    void SetFixedColumnSelection(BOOL bSelect)    { m_bFixedColumnSelection = bSelect;}
+    BOOL GetFixedColumnSelection()                { return m_bFixedColumnSelection;   }
+    void SetFixedRowSelection(BOOL bSelect)       { m_bFixedRowSelection = bSelect;   }
+    BOOL GetFixedRowSelection()                   { return m_bFixedRowSelection;      }
+    void EnableDragAndDrop(BOOL bAllow = TRUE)    { m_bAllowDragAndDrop = bAllow;     }
+    BOOL GetDragAndDrop() const                   { return m_bAllowDragAndDrop;       }
+    void SetRowResize(BOOL bResize = TRUE)        { m_bAllowRowResize = bResize;      }
+    BOOL GetRowResize() const                     { return m_bAllowRowResize;         }
+    void SetColumnResize(BOOL bResize = TRUE)     { m_bAllowColumnResize = bResize;   }
+    BOOL GetColumnResize() const                  { return m_bAllowColumnResize;      }
+    void SetHeaderSort(BOOL bSortOnClick = TRUE)  { m_bSortOnClick = bSortOnClick;    }
+    BOOL GetHeaderSort() const                    { return m_bSortOnClick;            }
+    void SetHandleTabKey(BOOL bHandleTab = TRUE)  { m_bHandleTabKey = bHandleTab;     }
+    BOOL GetHandleTabKey() const                  { return m_bHandleTabKey;           }
+    void SetDoubleBuffering(BOOL bBuffer = TRUE)  { m_bDoubleBuffer = bBuffer;        }
+    BOOL GetDoubleBuffering() const               { return m_bDoubleBuffer;           }
+    void EnableTitleTips(BOOL bEnable = TRUE)     { m_bTitleTips = bEnable;           }
+    BOOL GetTitleTips()                           { return m_bTitleTips;              }
+    void SetSortColumn(int nCol);
+    int  GetSortColumn() const                    { return m_nSortColumn;             }
+    void SetSortAscending(BOOL bAscending)        { m_bAscending = bAscending;        }
+    BOOL GetSortAscending() const                 { return m_bAscending;              }
+    void SetTrackFocusCell(BOOL bTrack)           { m_bTrackFocusCell = bTrack;       }
+    BOOL GetTrackFocusCell()                      { return m_bTrackFocusCell;         }
+    void SetFrameFocusCell(BOOL bFrame)           { m_bFrameFocus = bFrame;           }
+    BOOL GetFrameFocusCell()                      { return m_bFrameFocus;             }
+    void SetAutoSizeStyle(int nStyle = GVS_BOTH)  { m_nAutoSizeColumnStyle = nStyle;  }
+    int  GetAutoSizeStyle()                       { return m_nAutoSizeColumnStyle; }
+
+    void EnableHiddenColUnhide(BOOL bEnable = TRUE){ m_bHiddenColUnhide = bEnable;    }
+    BOOL GetHiddenColUnhide()                     { return m_bHiddenColUnhide;        }
+    void EnableHiddenRowUnhide(BOOL bEnable = TRUE){ m_bHiddenRowUnhide = bEnable;    }
+    BOOL GetHiddenRowUnhide()                     { return m_bHiddenRowUnhide;        }
+
+    void EnableColumnHide(BOOL bEnable = TRUE)    { m_bAllowColHide = bEnable;        }
+    BOOL GetColumnHide()                          { return m_bAllowColHide;           }
+    void EnableRowHide(BOOL bEnable = TRUE)       { m_bAllowRowHide = bEnable;        }
+    BOOL GetRowHide()                             { return m_bAllowRowHide;           }
+
+///////////////////////////////////////////////////////////////////////////////////
+// default Grid cells. Use these for setting default values such as colors and fonts
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    CGridCellBase* GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const;
+
+///////////////////////////////////////////////////////////////////////////////////
+// Grid cell Attributes
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    CGridCellBase* GetCell(int nRow, int nCol) const;   // Get the actual cell!
+
+    void SetModified(BOOL bModified = TRUE, int nRow = -1, int nCol = -1);
+    BOOL GetModified(int nRow = -1, int nCol = -1);
+    BOOL IsCellFixed(int nRow, int nCol);
+
+    BOOL   SetItem(const GV_ITEM* pItem);
+    BOOL   GetItem(GV_ITEM* pItem);
+    BOOL   SetItemText(int nRow, int nCol, LPCTSTR str);
+    // The following was virtual. If you want to override, use 
+    //  CGridCellBase-derived class's GetText() to accomplish same thing
+    CString GetItemText(int nRow, int nCol) const;
+
+    // EFW - 06/13/99 - Added to support printf-style formatting codes.
+    // Also supports use with a string resource ID
+#if !defined(_WIN32_WCE) || (_WIN32_WCE >= 210)
+    BOOL   SetItemTextFmt(int nRow, int nCol, LPCTSTR szFmt, ...);
+    BOOL   SetItemTextFmtID(int nRow, int nCol, UINT nID, ...);
+#endif
+
+    BOOL   SetItemData(int nRow, int nCol, LPARAM lParam);
+    LPARAM GetItemData(int nRow, int nCol) const;
+    BOOL   SetItemImage(int nRow, int nCol, int iImage);
+    int    GetItemImage(int nRow, int nCol) const;
+    BOOL   SetItemState(int nRow, int nCol, UINT state);
+    UINT   GetItemState(int nRow, int nCol) const;
+    BOOL   SetItemFormat(int nRow, int nCol, UINT nFormat);
+    UINT   GetItemFormat(int nRow, int nCol) const;
+    BOOL   SetItemBkColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
+    COLORREF GetItemBkColour(int nRow, int nCol) const;
+    BOOL   SetItemFgColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
+    COLORREF GetItemFgColour(int nRow, int nCol) const;
+    BOOL SetItemFont(int nRow, int nCol, const LOGFONT* lf);
+    const LOGFONT* GetItemFont(int nRow, int nCol);
+
+    BOOL IsItemEditing(int nRow, int nCol);
+
+    BOOL SetCellType(int nRow, int nCol, CRuntimeClass* pRuntimeClass);
+    BOOL SetDefaultCellType( CRuntimeClass* pRuntimeClass);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Operations
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    int  InsertColumn(LPCTSTR strHeading, UINT nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE,
+                      int nColumn = -1);
+    int  InsertRow(LPCTSTR strHeading, int nRow = -1);
+    BOOL DeleteColumn(int nColumn);
+    BOOL DeleteRow(int nRow);
+    BOOL DeleteNonFixedRows();
+    BOOL DeleteAllItems();
+
+	void ClearCells(CCellRange Selection);
+
+    BOOL AutoSizeRow(int nRow, BOOL bResetScroll = TRUE);
+    BOOL AutoSizeColumn(int nCol, UINT nAutoSizeStyle = GVS_DEFAULT, BOOL bResetScroll = TRUE);
+    void AutoSizeRows();
+    void AutoSizeColumns(UINT nAutoSizeStyle = GVS_DEFAULT);
+    void AutoSize(UINT nAutoSizeStyle = GVS_DEFAULT);
+    void ExpandColumnsToFit(BOOL bExpandFixed = TRUE);
+    void ExpandLastColumn();
+    void ExpandRowsToFit(BOOL bExpandFixed = TRUE);
+    void ExpandToFit(BOOL bExpandFixed = TRUE);
+
+    void Refresh();
+    void AutoFill();   // Fill grid with blank cells
+
+    void EnsureVisible(CCellID &cell)       { EnsureVisible(cell.row, cell.col); }
+    void EnsureVisible(int nRow, int nCol);
+    BOOL IsCellVisible(int nRow, int nCol);
+    BOOL IsCellVisible(CCellID cell);
+    BOOL IsCellEditable(int nRow, int nCol) const;
+    BOOL IsCellEditable(CCellID &cell) const;
+    BOOL IsCellSelected(int nRow, int nCol) const;
+    BOOL IsCellSelected(CCellID &cell) const;
+
+    // SetRedraw stops/starts redraws on things like changing the # rows/columns
+    // and autosizing, but not for user-intervention such as resizes
+    void SetRedraw(BOOL bAllowDraw, BOOL bResetScrollBars = FALSE);
+    BOOL RedrawCell(int nRow, int nCol, CDC* pDC = NULL);
+    BOOL RedrawCell(const CCellID& cell, CDC* pDC = NULL);
+    BOOL RedrawRow(int row);
+    BOOL RedrawColumn(int col);
+
+#ifndef _WIN32_WCE
+    BOOL Save(LPCTSTR filename, TCHAR chSeparator = _T(','));
+    BOOL Load(LPCTSTR filename, TCHAR chSeparator = _T(','));
+#endif
+
+///////////////////////////////////////////////////////////////////////////////////
+// Cell Ranges
+///////////////////////////////////////////////////////////////////////////////////
+ public:
+    CCellRange GetCellRange() const;
+    CCellRange GetSelectedCellRange() const;
+    void SetSelectedRange(const CCellRange& Range, BOOL bForceRepaint = FALSE, BOOL bSelectCells = TRUE);
+    void SetSelectedRange(int nMinRow, int nMinCol, int nMaxRow, int nMaxCol,
+                          BOOL bForceRepaint = FALSE, BOOL bSelectCells = TRUE);
+    BOOL IsValid(int nRow, int nCol) const;
+    BOOL IsValid(const CCellID& cell) const;
+    BOOL IsValid(const CCellRange& range) const;
+
+///////////////////////////////////////////////////////////////////////////////////
+// Clipboard, drag and drop, and cut n' paste operations
+///////////////////////////////////////////////////////////////////////////////////
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+    virtual void CutSelectedText();
+    virtual COleDataSource* CopyTextFromGrid();
+    virtual BOOL PasteTextToGrid(CCellID cell, COleDataObject* pDataObject, BOOL bSelectPastedCells=TRUE);
+#endif
+
+#ifndef GRIDCONTROL_NO_DRAGDROP
+ public:
+    virtual void OnBeginDrag();
+    virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+    virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+    virtual void OnDragLeave();
+    virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
+#endif
+
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+    virtual void OnEditCut();
+    virtual void OnEditCopy();
+    virtual void OnEditPaste();
+#endif
+    virtual void OnEditSelectAll();
+
+///////////////////////////////////////////////////////////////////////////////////
+// Misc.
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    CCellID GetNextItem(CCellID& cell, int nFlags) const;
+
+	BOOL SortItems(int nCol, BOOL bAscending, LPARAM data = 0);
+    BOOL SortTextItems(int nCol, BOOL bAscending, LPARAM data = 0);
+    BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data = 0);
+
+	void SetCompareFunction(PFNLVCOMPARE pfnCompare);
+
+	// in-built sort functions
+	static int CALLBACK pfnCellTextCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
+	static int CALLBACK pfnCellNumericCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Printing
+///////////////////////////////////////////////////////////////////////////////////
+#if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING)
+public:
+    void Print(CPrintDialog* pPrntDialog = NULL);
+
+    // EFW - New printing support functions
+    void EnableWysiwygPrinting(BOOL bEnable = TRUE) { m_bWysiwygPrinting = bEnable;     }
+    BOOL GetWysiwygPrinting()                       { return m_bWysiwygPrinting;        }
+
+    void SetShadedPrintOut(BOOL bEnable = TRUE)     {   m_bShadedPrintOut = bEnable;    }
+    BOOL GetShadedPrintOut(void)                    {   return m_bShadedPrintOut;       }
+
+    // Use -1 to have it keep the existing value
+    void SetPrintMarginInfo(int nHeaderHeight, int nFooterHeight,
+        int nLeftMargin, int nRightMargin, int nTopMargin,
+        int nBottomMargin, int nGap);
+
+    void GetPrintMarginInfo(int &nHeaderHeight, int &nFooterHeight,
+        int &nLeftMargin, int &nRightMargin, int &nTopMargin,
+        int &nBottomMargin, int &nGap);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Printing overrides for derived classes
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    virtual void OnBeginPrinting(CDC *pDC, CPrintInfo *pInfo);
+    virtual void OnPrint(CDC *pDC, CPrintInfo *pInfo);
+    virtual void OnEndPrinting(CDC *pDC, CPrintInfo *pInfo);
+
+#endif // #if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING)
+
+// Implementation
+public:
+    virtual ~CakGridCtrl();
+
+	static BOOL RegisterWindowClass();
+protected:
+    
+    BOOL Initialise();
+    void SetupDefaultCells();
+
+    LRESULT SendMessageToParent(int nRow, int nCol, int nMessage) const;
+    LRESULT SendDisplayRequestToParent(GV_DISPINFO* pDisplayInfo) const;
+    LRESULT SendCacheHintToParent(const CCellRange& range) const;
+
+    BOOL InvalidateCellRect(const int row, const int col);
+    BOOL InvalidateCellRect(const CCellID& cell);
+    BOOL InvalidateCellRect(const CCellRange& cellRange);
+    void EraseBkgnd(CDC* pDC);
+
+    BOOL GetCellRangeRect(const CCellRange& cellRange, LPRECT lpRect);
+
+    BOOL SetCell(int nRow, int nCol, CGridCellBase* pCell);
+
+    int  SetMouseMode(int nMode) { int nOldMode = m_MouseMode; m_MouseMode = nMode; return nOldMode; }
+    int  GetMouseMode() const    { return m_MouseMode; }
+
+    BOOL MouseOverRowResizeArea(CPoint& point);
+    BOOL MouseOverColumnResizeArea(CPoint& point);
+
+    CCellID GetTopleftNonFixedCell(BOOL bForceRecalculation = FALSE);
+    CCellRange GetUnobstructedNonFixedCellRange(BOOL bForceRecalculation = FALSE);
+    CCellRange GetVisibleNonFixedCellRange(LPRECT pRect = NULL, BOOL bForceRecalculation = FALSE);
+    CCellRange GetVisibleFixedCellRange(LPRECT pRect = NULL, BOOL bForceRecalculation = FALSE);
+
+    BOOL IsVisibleVScroll() { return ( (m_nBarState & GVL_VERT) > 0); } 
+    BOOL IsVisibleHScroll() { return ( (m_nBarState & GVL_HORZ) > 0); }
+    void ResetSelectedRange();
+    void ResetScrollBars();
+    void EnableScrollBars(int nBar, BOOL bEnable = TRUE);
+    int  GetScrollPos32(int nBar, BOOL bGetTrackPos = FALSE);
+    BOOL SetScrollPos32(int nBar, int nPos, BOOL bRedraw = TRUE);
+
+    BOOL SortTextItems(int nCol, BOOL bAscending, int low, int high);
+    BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data,
+                   int low, int high);
+
+    CPoint GetPointClicked(int nRow, int nCol, const CPoint& point);
+
+	void ValidateAndModifyCellContents(int nRow, int nCol, LPCTSTR strText);
+
+// Overrrides
+    // ClassWizard generated virtual function overrides
+    //{{AFX_VIRTUAL(CGridCtrl)
+    protected:
+    virtual void PreSubclassWindow();
+    //}}AFX_VIRTUAL
+
+protected:
+#if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING)
+    // Printing
+	virtual void PrintFixedRowCells(int nStartColumn, int nStopColumn, int& row, CRect& rect,
+                                    CDC *pDC, BOOL& bFirst);
+    virtual void PrintColumnHeadings(CDC *pDC, CPrintInfo *pInfo);
+    virtual void PrintHeader(CDC *pDC, CPrintInfo *pInfo);
+    virtual void PrintFooter(CDC *pDC, CPrintInfo *pInfo);
+    virtual void PrintRowButtons(CDC *pDC, CPrintInfo* /*pInfo*/);
+#endif
+
+#ifndef GRIDCONTROL_NO_DRAGDROP
+    // Drag n' drop
+    virtual CImageList* CreateDragImage(CPoint *pHotSpot);    // no longer necessary
+#endif
+
+    // Mouse Clicks
+    virtual void  OnFixedColumnClick(CCellID& cell);
+    virtual void  OnFixedRowClick(CCellID& cell);
+
+    // Editing
+    virtual void  OnEditCell(int nRow, int nCol, CPoint point, UINT nChar);
+    virtual void  OnEndEditCell(int nRow, int nCol, CString str);
+	virtual BOOL  ValidateEdit(int nRow, int nCol, LPCTSTR str);
+    virtual void  EndEditing();
+
+    // Drawing
+    virtual void  OnDraw(CDC* pDC);
+
+    // CGridCellBase Creation and Cleanup
+    virtual CGridCellBase* CreateCell(int nRow, int nCol);
+    virtual void DestroyCell(int nRow, int nCol);
+
+// Attributes
+protected:
+    // General attributes
+    COLORREF    m_crFixedTextColour, m_crFixedBkColour;
+    COLORREF    m_crGridBkColour, m_crGridLineColour;
+    COLORREF    m_crWindowText, m_crWindowColour, m_cr3DFace,     // System colours
+                m_crShadow;
+    COLORREF    m_crTTipBackClr, m_crTTipTextClr;                 // Titletip colours - FNA
+    
+    BOOL        m_bVirtualMode;
+    LPARAM      m_lParam;                                           // lParam for callback
+    GRIDCALLBACK m_pfnCallback;                                     // The callback function
+
+    int         m_nGridLines;
+    BOOL        m_bEditable;
+    BOOL        m_bModified;
+    BOOL        m_bAllowDragAndDrop;
+    BOOL        m_bListMode;
+    BOOL        m_bSingleRowSelection;
+    BOOL        m_bSingleColSelection;
+    BOOL        m_bAllowDraw;
+    BOOL        m_bEnableSelection;
+    BOOL        m_bFixedRowSelection, m_bFixedColumnSelection;
+    BOOL        m_bSortOnClick;
+    BOOL        m_bHandleTabKey;
+    BOOL        m_bDoubleBuffer;
+    BOOL        m_bTitleTips;
+    int         m_nBarState;
+    BOOL        m_bWysiwygPrinting;
+    BOOL        m_bHiddenColUnhide, m_bHiddenRowUnhide;
+    BOOL        m_bAllowColHide, m_bAllowRowHide;
+    BOOL        m_bAutoSizeSkipColHdr;
+    BOOL        m_bTrackFocusCell;
+    BOOL        m_bFrameFocus;
+    UINT        m_nAutoSizeColumnStyle;
+
+    // Cell size details
+    int         m_nRows, m_nFixedRows, m_nCols, m_nFixedCols;
+    CUIntArray  m_arRowHeights, m_arColWidths;
+    int         m_nVScrollMax, m_nHScrollMax;
+
+    // Fonts and images
+    CRuntimeClass*   m_pRtcDefault; // determines kind of Grid Cell created by default
+    CGridDefaultCell m_cellDefault;  // "default" cell. Contains default colours, font etc.
+    CGridDefaultCell m_cellFixedColDef, m_cellFixedRowDef, m_cellFixedRowColDef;
+    CFont       m_PrinterFont;  // for the printer
+    CImageList* m_pImageList;
+
+    // Cell data
+    CTypedPtrArray<CObArray, GRID_ROW*> m_RowData;
+
+    // Mouse operations such as cell selection
+    int         m_MouseMode;
+    BOOL        m_bLMouseButtonDown, m_bRMouseButtonDown;
+    CPoint      m_LeftClickDownPoint, m_LastMousePoint;
+    CCellID     m_LeftClickDownCell, m_SelectionStartCell;
+    CCellID     m_idCurrentCell, m_idTopLeftCell;
+    INT_PTR     m_nTimerID;
+    int         m_nTimerInterval;
+    int         m_nResizeCaptureRange;
+    BOOL        m_bAllowRowResize, m_bAllowColumnResize;
+    int         m_nRowsPerWheelNotch;
+    CMap<DWORD,DWORD, CCellID, CCellID&> m_SelectedCellMap, m_PrevSelectedCellMap;
+
+#ifndef GRIDCONTROL_NO_TITLETIPS
+    CTitleTip   m_TitleTip;             // Title tips for cells
+#endif
+
+    // Drag and drop
+    CCellID     m_LastDragOverCell;
+#ifndef GRIDCONTROL_NO_DRAGDROP
+    CGridDropTarget m_DropTarget;       // OLE Drop target for the grid
+#endif
+
+    // Printing information
+    CSize       m_CharSize;
+    int         m_nPageHeight;
+    CSize       m_LogicalPageSize,      // Page size in gridctrl units.
+                m_PaperSize;            // Page size in device units.
+    // additional properties to support Wysiwyg printing
+    int         m_nPageWidth;
+    int         m_nPrintColumn;
+    int         m_nCurrPrintRow;
+    int         m_nNumPages;
+    int         m_nPageMultiplier;
+
+    // sorting
+    int          m_bAscending;
+    int          m_nSortColumn;
+	PFNLVCOMPARE m_pfnCompare;
+
+    // EFW - Added to support shaded/unshaded printout.  If true, colored
+    // cells will print as-is.  If false, all text prints as black on white.
+    BOOL        m_bShadedPrintOut;
+
+    // EFW - Added support for user-definable margins.  Top and bottom are in 
+    // lines.  Left, right, and gap are in characters (avg width is used).
+    int         m_nHeaderHeight, m_nFooterHeight, m_nLeftMargin,
+                m_nRightMargin, m_nTopMargin, m_nBottomMargin, m_nGap;
+
+protected:
+    void SelectAllCells();
+    void SelectColumns(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE);
+    void SelectRows(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE);
+    void SelectCells(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE);
+    void OnSelecting(const CCellID& currentCell);
+
+    // Generated message map functions
+    //{{AFX_MSG(CGridCtrl)
+    afx_msg void OnPaint();
+    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
+    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
+    afx_msg void OnSize(UINT nType, int cx, int cy);
+    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
+    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
+    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
+    afx_msg void OnTimer(UINT_PTR nIDEvent);
+    afx_msg UINT OnGetDlgCode();
+    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+    afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
+    afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
+    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+    afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+    afx_msg void OnUpdateEditSelectAll(CCmdUI* pCmdUI);
+    //}}AFX_MSG
+#ifndef _WIN32_WCE_NO_CURSOR
+    afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
+#endif
+#ifndef _WIN32_WCE
+    afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
+    afx_msg void OnRButtonUp(UINT nFlags, CPoint point);    // EFW - Added
+    afx_msg void OnSysColorChange();
+#endif
+#ifndef _WIN32_WCE_NO_CURSOR
+    afx_msg void OnCaptureChanged(CWnd *pWnd);
+#endif
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+    afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
+    afx_msg void OnUpdateEditCut(CCmdUI* pCmdUI);
+    afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);
+#endif
+#if (_MFC_VER >= 0x0421) || (_WIN32_WCE >= 210)
+    afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
+#endif
+#if !defined(_WIN32_WCE) && (_MFC_VER >= 0x0421)
+    afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
+#endif
+    afx_msg LRESULT OnSetFont(WPARAM hFont, LPARAM lParam);
+    afx_msg LRESULT OnGetFont(WPARAM hFont, LPARAM lParam);
+    afx_msg LRESULT OnImeChar(WPARAM wCharCode, LPARAM lParam);
+    afx_msg void OnEndInPlaceEdit(NMHDR* pNMHDR, LRESULT* pResult);
+    DECLARE_MESSAGE_MAP()
+
+    enum eMouseModes { MOUSE_NOTHING, MOUSE_SELECT_ALL, MOUSE_SELECT_COL, MOUSE_SELECT_ROW,
+                       MOUSE_SELECT_CELLS, MOUSE_SCROLLING_CELLS,
+                       MOUSE_OVER_ROW_DIVIDE, MOUSE_SIZING_ROW,
+                       MOUSE_OVER_COL_DIVIDE, MOUSE_SIZING_COL,
+                       MOUSE_PREPARE_EDIT,
+#ifndef GRIDCONTROL_NO_DRAGDROP
+                       MOUSE_PREPARE_DRAG, MOUSE_DRAGGING
+#endif
+    };
+//      for sort in virtual mode, and column order, save and load layer
+public:
+	typedef std::vector<int> intlist;
+	void Reorder(int From, int To);
+	void SetVirtualCompare(PVIRTUALCOMPARE VirtualCompare) { m_pfnVirtualCompare = VirtualCompare;}
+	int m_CurCol;
+	void AllowReorderColumn(bool b=true) { m_AllowReorderColumn = b;}
+	void EnableDragRowMode(bool b=true) { m_bDragRowMode = b; if(b) EnableDragAndDrop(); } // to change row order
+	int GetLayer(int** pLayer); //  gives back the number of ints of the area (do not forget to delete *pLayer)
+	void SetLayer(int* pLayer); // coming from a previous GetLayer (ignored if not same number of column, or the same revision number)
+	void ForceQuitFocusOnTab(bool b=true) { m_QuitFocusOnTab = b;} // use only if GetParent() is a CDialog
+	void AllowSelectRowInFixedCol(bool b=true) { m_AllowSelectRowInFixedCol = b;} // 
+//    allow acces?
+	intlist m_arRowOrder, m_arColOrder;
+	static CakGridCtrl* m_This;
+protected:
+	virtual void AddSubVirtualRow(int Num, int Nb);
+	bool m_bDragRowMode;
+	int m_CurRow;
+private:
+	void ResetVirtualOrder();
+	PVIRTUALCOMPARE m_pfnVirtualCompare;
+	static bool NotVirtualCompare(int c1, int c2);
+	bool m_InDestructor;
+	bool m_AllowReorderColumn;
+	bool m_QuitFocusOnTab;
+	bool m_AllowSelectRowInFixedCol;
+
+};
+
+// Returns the default cell implementation for the given grid region
+inline CGridCellBase* CakGridCtrl::GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const
+{ 
+    if (bFixedRow && bFixedCol) return (CGridCellBase*) &m_cellFixedRowColDef;
+    if (bFixedRow)              return (CGridCellBase*) &m_cellFixedRowDef;
+    if (bFixedCol)              return (CGridCellBase*) &m_cellFixedColDef;
+    return (CGridCellBase*) &m_cellDefault;
+}
+
+inline CGridCellBase* CakGridCtrl::GetCell(int nRow, int nCol) const
+{
+    if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) 
+        return NULL;
+
+    if (GetVirtualMode())
+    {
+        CGridCellBase* pCell = GetDefaultCell(nRow < m_nFixedRows, nCol < m_nFixedCols);
+        static GV_DISPINFO gvdi;
+        gvdi.item.row     = nRow;
+        gvdi.item.col     = nCol;
+        gvdi.item.mask    = 0xFFFFFFFF;
+        gvdi.item.nState  = 0;
+        gvdi.item.nFormat = pCell->GetFormat();
+        gvdi.item.iImage  = pCell->GetImage();
+        gvdi.item.crBkClr = pCell->GetBackClr();
+        gvdi.item.crFgClr = pCell->GetTextClr();
+        gvdi.item.lParam  = pCell->GetData();
+        memcpy(&gvdi.item.lfFont, pCell->GetFont(), sizeof(LOGFONT));
+        gvdi.item.nMargin = pCell->GetMargin();
+        gvdi.item.strText.Empty();
+
+        // Fix the state bits
+        if (IsCellSelected(nRow, nCol))   gvdi.item.nState |= GVIS_SELECTED;
+        if (nRow < GetFixedRowCount())    gvdi.item.nState |= (GVIS_FIXED | GVIS_FIXEDROW);
+        if (nCol < GetFixedColumnCount()) gvdi.item.nState |= (GVIS_FIXED | GVIS_FIXEDCOL);
+        if (GetFocusCell() == CCellID(nRow, nCol)) gvdi.item.nState |= GVIS_FOCUSED;
+		if(!m_InDestructor)
+		{
+			gvdi.item.row = m_arRowOrder[nRow];
+			gvdi.item.col = m_arColOrder[nCol];
+
+			if (m_pfnCallback)
+				m_pfnCallback(&gvdi, m_lParam);
+			else
+				SendDisplayRequestToParent(&gvdi);
+			gvdi.item.row = nRow;        
+			gvdi.item.col = nCol;
+		}
+        static CGridCell cell;
+        cell.SetState(gvdi.item.nState);
+        cell.SetFormat(gvdi.item.nFormat);
+        cell.SetImage(gvdi.item.iImage);
+        cell.SetBackClr(gvdi.item.crBkClr);
+        cell.SetTextClr(gvdi.item.crFgClr);
+        cell.SetData(gvdi.item.lParam);
+        cell.SetFont(&(gvdi.item.lfFont));
+        cell.SetMargin(gvdi.item.nMargin);
+        cell.SetText(gvdi.item.strText);
+        cell.SetGrid((CakGridCtrl*)this);
+
+        return (CGridCellBase*) &cell;
+    }
+
+    GRID_ROW* pRow = m_RowData[nRow];
+    if (!pRow) return NULL;
+    return pRow->GetAt(m_arColOrder[nCol]);
+}
+
+inline BOOL CakGridCtrl::SetCell(int nRow, int nCol, CGridCellBase* pCell)
+{
+    if (GetVirtualMode())
+        return FALSE;
+
+    if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) 
+        return FALSE;
+
+    GRID_ROW* pRow = m_RowData[nRow];
+    if (!pRow) return FALSE;
+
+    pCell->SetCoords( nRow, nCol); 
+    pRow->SetAt(nCol, pCell);
+
+    return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)

--
Gitblit v1.9.3