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

Internet/IE编程

开发平台:

Visual C++

  1. #if !defined(AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
  2. #define AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_
  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. /////////////////////////////////////////////////////////////////////////////
  7. // GridCtrl.h : header file
  8. //
  9. // MFC Grid Control header file
  10. //
  11. // Written by Chris Maunder (chrismaunder@codeguru.com)
  12. // Copyright (c) 1998.
  13. //
  14. // The code contained in this file is based on the original
  15. // WorldCom Grid control written by Joe Willcoxson,
  16. //        E-mail:  chinajoe@aol.com
  17. //        URL:  http://users.aol.com/chinajoe
  18. //
  19. // This code may be used in compiled form in any way you desire. This
  20. // file may be redistributed unmodified by any means PROVIDING it is 
  21. // not sold for profit without the authors written consent, and 
  22. // providing that this notice and the authors name and all copyright 
  23. // notices remains intact. If the source code in this file is used in 
  24. // any  commercial application then a statement along the lines of 
  25. // "Portions copyright (c) Chris Maunder, 1998" must be included in 
  26. // the startup banner, "About" box or printed documentation. An email 
  27. // letting me know that you are using it would be nice as well. That's 
  28. // not much to ask considering the amount of work that went into this.
  29. //
  30. // This file is provided "as is" with no expressed or implied warranty.
  31. // The author accepts no liability for any damage/loss of business that
  32. // this product may cause.
  33. //
  34. // Expect bugs!
  35. // 
  36. // Please use and enjoy. Please let me know of any bugs/mods/improvements 
  37. // that you have found/implemented and I will fix/incorporate them into this
  38. // file. 
  39. //
  40. /////////////////////////////////////////////////////////////////////////////
  41. #define GRIDCONTROL_USE_TITLETIPS       // Use titletips for cells with large data
  42. #define GRIDCONTROL_USE_OLE_DRAGDROP    // Use OLE drag and drop
  43. #include "CellRange.h"
  44. #include <afxtempl.h>
  45. #ifdef GRIDCONTROL_USE_TITLETIPS
  46. #include "TitleTip.h"
  47. #endif
  48. #ifdef GRIDCONTROL_USE_OLE_DRAGDROP
  49. #include "GridDropTarget.h"
  50. #else
  51. #include <afxole.h>                     // This is sloppy I know...
  52. #endif
  53. // Use this as the classname when inserting this control as a custom control
  54. // in the MSVC++ dialog editor
  55. #define GRIDCTRL_CLASSNAME _T("MFCGridCtrl")
  56. #define IsSHIFTpressed() ( (GetKeyState(VK_SHIFT) & (1 << (sizeof(SHORT)*8-1))) != 0   )
  57. #define IsCTRLpressed()  ( (GetKeyState(VK_CONTROL) & (1 << (sizeof(SHORT)*8-1))) != 0 )
  58. // Used for Get/SetItem calls.
  59. typedef struct _GV_ITEM { 
  60.     int      row,col;     // Row and Column of item
  61.     UINT     mask;        // Mask for use in getting/setting cell data
  62.     UINT     state;       // cell state (focus/hilighted etc)
  63.     UINT     nFormat;     // Format of cell
  64.     CString  szText;      // Text in cell
  65.     int      iImage;      // index of the list view item抯 icon
  66.     COLORREF crBkClr;     // Background colour (or CLR_DEFAULT)
  67.     COLORREF crFgClr;     // Forground colour (or CLR_DEFAULT)
  68.     LPARAM   lParam;      // 32-bit value to associate with item 
  69.     LOGFONT  lfFont;      // Cell font
  70. } GV_ITEM; 
  71. // Grid line selection
  72. #define GVL_NONE                0
  73. #define GVL_HORZ                1
  74. #define GVL_VERT                2
  75. #define GVL_BOTH                3
  76. // Cell data mask
  77. #define GVIF_TEXT               LVIF_TEXT
  78. #define GVIF_IMAGE              LVIF_IMAGE
  79. #define GVIF_PARAM              LVIF_PARAM
  80. #define GVIF_STATE              LVIF_STATE
  81. #define GVIF_BKCLR              (GVIF_STATE<<1)
  82. #define GVIF_FGCLR              (GVIF_STATE<<2)
  83. #define GVIF_FORMAT             (GVIF_STATE<<3)
  84. #define GVIF_FONT               (GVIF_STATE<<4)
  85. // Cell states
  86. #define GVIS_FOCUSED            0x0001
  87. #define GVIS_SELECTED           0x0002
  88. #define GVIS_DROPHILITED        0x0004
  89. #define GVIS_READONLY           0x0008
  90. // Cell Searching options
  91. #define GVNI_FOCUSED            0x0001
  92. #define GVNI_SELECTED           0x0002
  93. #define GVNI_DROPHILITED        0x0004
  94. #define GVNI_READONLY           0x0008
  95. #define GVNI_ABOVE              LVNI_ABOVE
  96. #define GVNI_BELOW              LVNI_BELOW
  97. #define GVNI_TOLEFT             LVNI_TOLEFT
  98. #define GVNI_TORIGHT            LVNI_TORIGHT
  99. #define GVNI_ALL                (LVNI_BELOW|LVNI_TORIGHT)
  100. // Hit test values (not yet implemented)
  101. #define GVHT_DATA               0x0000
  102. #define GVHT_TOPLEFT            0x0001
  103. #define GVHT_COLHDR             0x0002
  104. #define GVHT_ROWHDR             0x0004
  105. #define GVHT_COLSIZER           0x0008
  106. #define GVHT_ROWSIZER           0x0010
  107. #define GVHT_LEFT               0x0020
  108. #define GVHT_RIGHT              0x0040
  109. #define GVHT_ABOVE              0x0080
  110. #define GVHT_BELOW              0x0100
  111. typedef struct tagNM_GRIDVIEW { 
  112.     NMHDR hdr; 
  113.     int   iRow; 
  114.     int   iColumn; 
  115. } NM_GRIDVIEW;
  116. typedef struct tagGV_DISPINFO { 
  117.     NMHDR   hdr; 
  118.     GV_ITEM item; 
  119. } GV_DISPINFO;
  120. // Messages sent to the grid's parent (More will be added in future)
  121. #define GVN_BEGINDRAG           LVN_BEGINDRAG        // LVN_FIRST-9
  122. #define GVN_BEGINLABELEDIT      LVN_BEGINLABELEDIT   // LVN_FIRST-5
  123. #define GVN_BEGINRDRAG          LVN_BEGINRDRAG
  124. #define GVN_COLUMNCLICK         LVN_COLUMNCLICK
  125. #define GVN_DELETEITEM          LVN_DELETEITEM
  126. #define GVN_ENDLABELEDIT        LVN_ENDLABELEDIT     // LVN_FIRST-6
  127. #define GVN_SELCHANGING         LVN_BEGINLABELEDIT+1 // LVN_FIRST-4
  128. #define GVN_SELCHANGED          LVN_BEGINLABELEDIT+2 // LVN_FIRST-3
  129. // Each cell contains one of these. Fields "row" and "column" are not stored since we
  130. // will usually have acces to them in other ways, and they are an extra 8 bytes per
  131. // cell that is probably unnecessary.
  132. class CGridCell : public CObject
  133. {
  134. public:
  135.     CGridCell() 
  136.     {
  137.         state = 0;
  138.         nFormat = 0;
  139.         szText.Empty();
  140.         iImage = -1;
  141.         lParam = 0;
  142. crBkClr = CLR_DEFAULT;
  143. crFgClr = CLR_DEFAULT;
  144.     }
  145.     UINT     state;       // Cell state (selected/focus etc)
  146.     UINT     nFormat;     // Cell format
  147.     CString  szText;      // Cell text (or binary data if you wish...)
  148.     int      iImage;      // Index of the list view item抯 icon 
  149.     COLORREF crBkClr;     // Background colour (or CLR_DEFAULT)
  150.     COLORREF crFgClr;     // Forground colour (or CLR_DEFAULT)
  151.     LPARAM   lParam;      // 32-bit value to associate with item
  152.     LOGFONT  lfFont;      // Cell font
  153. }; 
  154. // storage typedef for each row in the grid
  155. typedef CTypedPtrArray<CObArray, CGridCell*> GRID_ROW;
  156. // DDX_GridControl is used where a DDX_Control call is needed. In some strange
  157. // situations the usual DDX_Control does not result in CGridCtrl::SubclassWindow
  158. // or CGridCtrl::PreSubclassWindow being called. Using this version calls 
  159. // CGridCtrl::SubclassWindow directly - ensuring that cell metrics are set properly
  160. class CGridCtrl;
  161. void AFXAPI DDX_GridControl(CDataExchange* pDX, int nIDC, CGridCtrl& rControl);
  162. /////////////////////////////////////////////////////////////////////////////
  163. // CGridCtrl window
  164. class CGridCtrl : public CWnd
  165. {
  166. // Construction
  167. public:
  168.     CGridCtrl(int nRows = 0, int nCols = 0, int nFixedRows = 0, int nFixedCols = 0);
  169.     DECLARE_DYNCREATE(CGridCtrl)
  170.     BOOL Create(const RECT& rect, CWnd* parent, UINT nID,
  171.                 DWORD dwStyle = WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE);
  172.     BOOL SubclassWindow(HWND hWnd);
  173. // Attributes
  174. public:
  175.     int  GetRowCount() const                    { return m_nRows; }
  176.     int  GetColumnCount() const                 { return m_nCols; }
  177.     int  GetFixedRowCount() const               { return m_nFixedRows; }
  178.     int  GetFixedColumnCount() const            { return m_nFixedCols; }
  179.     BOOL SetRowCount(int nRows = 10);
  180.     BOOL SetColumnCount(int nCols = 10);
  181.     BOOL SetFixedRowCount(int nFixedRows = 1);
  182.     BOOL SetFixedColumnCount(int nFixedCols = 1);
  183.     int  GetRowHeight(int nRow) const;
  184.     BOOL SetRowHeight(int row, int height);
  185.     int  GetColumnWidth(int nCol) const;
  186.     BOOL SetColumnWidth(int col, int width);
  187.     BOOL GetCellOrigin(int nRow, int nCol, LPPOINT p) const;
  188.     BOOL GetCellOrigin(const CCellID& cell, LPPOINT p) const;
  189.     BOOL GetCellRect(int nRow, int nCol, LPRECT pRect) const;
  190.     BOOL GetCellRect(const CCellID& cell, LPRECT pRect) const;
  191.     int  GetFixedRowHeight() const;
  192.     int  GetFixedColumnWidth() const;
  193.     long GetVirtualWidth() const;
  194.     long GetVirtualHeight() const;
  195.     void     SetTextColor(COLORREF clr)           { m_crTextColour = clr;             }
  196.     COLORREF GetTextColor() const                 { return m_crTextColour;            }
  197.     void     SetTextBkColor(COLORREF clr)         { m_crTextBkColour = clr;           }
  198.     COLORREF GetTextBkColor() const               { return m_crTextBkColour;          }
  199.     void     SetBkColor(COLORREF clr)             { m_crBkColour = clr;               }
  200.     COLORREF GetBkColor() const                   { return m_crBkColour;              }
  201.     void     SetFixedTextColor(COLORREF clr)      { m_crFixedTextColour = clr;        }
  202.     COLORREF GetFixedTextColor() const            { return m_crFixedTextColour;       }
  203.     void     SetFixedBkColor(COLORREF clr)        { m_crFixedBkColour = clr;          }
  204.     COLORREF GetFixedBkColor() const              { return m_crFixedBkColour;         } 
  205.     void     SetGridColor(COLORREF clr)           { m_crGridColour = clr;             }
  206.     COLORREF GetGridColor() const                 { return m_crGridColour;            }
  207.     int GetSelectedCount() const                  { return m_SelectedCellMap.GetCount(); }
  208.     CCellID GetFocusCell() const                  { return m_idCurrentCell;           }
  209.     void SetImageList(CImageList* pList)          { m_pImageList = pList;             }
  210.     CImageList* GetImageList() const              { return m_pImageList;              }
  211.     void SetGridLines(int nWhichLines = GVL_BOTH) { m_nGridLines = nWhichLines; 
  212.                                                     if (::IsWindow(GetSafeHwnd())) Invalidate(); }
  213.     int  GetGridLines() const                     { return m_nGridLines;              }
  214.     void SetEditable(BOOL bEditable = TRUE)       { m_bEditable = bEditable;          }
  215.     BOOL IsEditable() const                       { return m_bEditable;               }
  216.     void SetModified(BOOL bModified = TRUE)       { m_bModified = bModified;          }
  217.     BOOL GetModified() const                      { return m_bModified;               }
  218.     void SetListMode(BOOL bEnableListMode = TRUE) { m_bListMode = bEnableListMode;    }
  219.     BOOL GetListMode() const                      { return m_bListMode;               }
  220.     void EnableSelection(BOOL bEnable = TRUE)     { ResetSelectedRange(); m_bEnableSelection = bEnable; ResetSelectedRange(); }
  221.     BOOL IsSelectable() const                     { return m_bEnableSelection;        }
  222.     void EnableDragAndDrop(BOOL bAllow = TRUE)    { m_bAllowDragAndDrop = bAllow;     }
  223.     BOOL GetDragAndDrop() const                   { return m_bAllowDragAndDrop;       }
  224.     void SetRowResize(BOOL bResize = TRUE)        { m_bAllowRowResize = bResize;      }
  225.     BOOL GetRowResize() const                     { return m_bAllowRowResize;         }
  226.     void SetColumnResize(BOOL bResize = TRUE)     { m_bAllowColumnResize = bResize;   }
  227.     BOOL GetColumnResize() const                  { return m_bAllowColumnResize;      }
  228.     void SetHeaderSort(BOOL bSortOnClick = TRUE)  { m_bSortOnClick = bSortOnClick;    }
  229.     BOOL GetHeaderSort() const                    { return m_bSortOnClick;            }
  230.     void SetHandleTabKey(BOOL bHandleTab = TRUE)  { m_bHandleTabKey = bHandleTab;     }
  231.     BOOL GetHandleTabKey() const                  { return m_bHandleTabKey;           }
  232.     void SetDoubleBuffering(BOOL bBuffer = TRUE)  { m_bDoubleBuffer = bBuffer;        }
  233.     BOOL GetDoubleBuffering() const               { return m_bDoubleBuffer;           }
  234.     void EnableTitleTips(BOOL bEnable = TRUE)     { m_bTitleTips = bEnable;           }
  235.     BOOL GetTitleTips()                           { return m_bTitleTips;              }
  236.     BOOL   SetItem(const GV_ITEM* pItem);
  237.     BOOL   GetItem(GV_ITEM* pItem);
  238.     BOOL   SetItemText(int nRow, int nCol, LPCTSTR str);
  239.     virtual CString GetItemText(int nRow, int nCol);
  240.     BOOL   SetItemData(int nRow, int nCol, LPARAM lParam);
  241.     LPARAM GetItemData(int nRow, int nCol) const;
  242.     BOOL   SetItemImage(int nRow, int nCol, int iImage);
  243.     int    GetItemImage(int nRow, int nCol) const;
  244.     BOOL   SetItemState(int nRow, int nCol, UINT state);
  245.     UINT   GetItemState(int nRow, int nCol) const;
  246.     BOOL   SetItemFormat(int nRow, int nCol, UINT nFormat);
  247.     UINT   GetItemFormat(int nRow, int nCol) const;
  248. BOOL   SetItemBkColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
  249. COLORREF GetItemBkColour(int nRow, int nCol) const;
  250. BOOL   SetItemFgColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
  251. COLORREF GetItemFgColour(int nRow, int nCol) const;
  252. BOOL SetItemFont(int nRow, int nCol, LOGFONT* lf);
  253. LOGFONT* GetItemFont(int nRow, int nCol) const;
  254. // Operations
  255. public:
  256.     int  InsertColumn(LPCTSTR strHeading, UINT nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE,
  257.                       int nColumn = -1);
  258.     int  InsertRow(LPCTSTR strHeading, int nRow = -1);
  259.     BOOL DeleteColumn(int nColumn);
  260.     BOOL DeleteRow(int nRow);
  261.     BOOL DeleteNonFixedRows();
  262.     BOOL DeleteAllItems();
  263.     BOOL AutoSizeRow(int nRow);
  264.     BOOL AutoSizeColumn(int nCol);
  265.     void AutoSizeRows();
  266.     void AutoSizeColumns();
  267.     void AutoSize();
  268.     void ExpandColumnsToFit();
  269.     void ExpandRowsToFit();
  270.     void ExpandToFit();
  271.     CSize GetTextExtent(LPCTSTR str, BOOL bUseSelectedFont = TRUE);
  272.     void EnsureVisible(CCellID &cell)       { EnsureVisible(cell.row, cell.col); }
  273.     void EnsureVisible(int nRow, int nCol);
  274.     BOOL IsCellVisible(int nRow, int nCol) const;
  275.     BOOL IsCellVisible(CCellID cell) const;
  276.     BOOL IsCellEditable(int nRow, int nCol) const;
  277.     BOOL IsCellEditable(CCellID &cell) const;
  278.     // SetRedraw stops/starts redraws on things like changing the # rows/columns
  279.     // and autosizing, but not for user-intervention such as resizes
  280.     void SetRedraw(BOOL bAllowDraw, BOOL bResetScrollBars = FALSE);
  281.     BOOL RedrawCell(int nRow, int nCol, CDC* pDC = NULL);
  282.     BOOL RedrawCell(const CCellID& cell, CDC* pDC = NULL);
  283.     BOOL RedrawRow(int row);
  284.     BOOL RedrawColumn(int col);
  285.     void Print(); 
  286.     BOOL Save(LPCTSTR filename);
  287.     BOOL Load(LPCTSTR filename);
  288.     CCellRange GetCellRange() const;
  289.     CCellRange GetSelectedCellRange() const;
  290.     void SetSelectedRange(const CCellRange& Range, BOOL bForceRepaint = FALSE);
  291.     void SetSelectedRange(int nMinRow, int nMinCol, int nMaxRow, int nMaxCol,
  292.                           BOOL bForceRepaint = FALSE);
  293.     BOOL IsValid(int nRow, int nCol) const;
  294.     BOOL IsValid(const CCellID& cell) const;
  295.     BOOL IsValid(const CCellRange& range) const;
  296.     // Clipboard and cut n' paste operations
  297.     virtual void CutSelectedText();
  298.     virtual COleDataSource* CopyTextFromGrid();
  299.     virtual BOOL PasteTextToGrid(CCellID cell, COleDataObject* pDataObject);
  300.     void OnBeginDrag();
  301.     DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
  302.     DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
  303.     void OnDragLeave();
  304.     BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
  305.     virtual void OnEditCut();
  306.     virtual void OnEditCopy();
  307.     virtual void OnEditPaste();
  308.     virtual void OnEditSelectAll();
  309.     CCellID GetNextItem(CCellID& cell, int nFlags) const;
  310.     BOOL SortTextItems(int nCol, BOOL bAscending);
  311.     BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data = 0);
  312. // Overrides
  313.     // ClassWizard generated virtual function overrides
  314.     //{{AFX_VIRTUAL(CGridCtrl)
  315.     protected:
  316.     virtual void PreSubclassWindow();
  317.     //}}AFX_VIRTUAL
  318.     public:
  319.     virtual void OnBeginPrinting(CDC *pDC, CPrintInfo *pInfo);
  320.     virtual void OnPrint(CDC *pDC, CPrintInfo *pInfo);
  321.     virtual void OnEndPrinting(CDC *pDC, CPrintInfo *pInfo);
  322. // Implementation
  323. public:
  324.     virtual ~CGridCtrl();
  325. public:
  326. BOOL m_bIsYXGrid;
  327. protected:
  328.     BOOL RegisterWindowClass();
  329.     LRESULT SendMessageToParent(int nRow, int nCol, int nMessage);
  330.     BOOL InvalidateCellRect(const CCellID& cell);
  331.     BOOL InvalidateCellRect(const CCellRange& cellRange);
  332.     void EraseBkgnd(CDC* pDC);
  333.     BOOL GetCellRangeRect(const CCellRange& cellRange, LPRECT lpRect) const;
  334.     CGridCell* GetCell(int nRow, int nCol) const;
  335.     BOOL SetCell(int nRow, int nCol, CGridCell* pCell);
  336.     int  SetMouseMode(int nMode) { int nOldMode = m_MouseMode; m_MouseMode = nMode; return nOldMode; }
  337.     int  GetMouseMode() const    { return m_MouseMode; }
  338.     CCellID GetCellFromPt(CPoint point, BOOL bAllowFixedCellCheck = TRUE) const;
  339.     CCellID GetTopleftNonFixedCell() const;
  340.     CCellRange GetUnobstructedNonFixedCellRange() const;
  341.     CCellRange GetVisibleNonFixedCellRange(LPRECT pRect = NULL) const;
  342.     CCellID SetFocusCell(CCellID cell);
  343.     CCellID SetFocusCell(int nRow, int nCol);
  344.     void ResetSelectedRange();
  345.     void ResetScrollBars();
  346.     int  GetScrollPos32(int nBar, BOOL bGetTrackPos = FALSE);
  347.     BOOL SetScrollPos32(int nBar, int nPos, BOOL bRedraw = TRUE);
  348.     BOOL SortTextItems(int nCol, BOOL bAscending, int low, int high);
  349.     BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data, 
  350.                    int low, int high);
  351. // Overrrides
  352. protected:
  353.     // Printing    
  354.     virtual void PrintColumnHeadings(CDC *pDC, CPrintInfo *pInfo);
  355.     virtual void PrintHeader(CDC *pDC, CPrintInfo *pInfo);
  356.     virtual void PrintFooter(CDC *pDC, CPrintInfo *pInfo);
  357.     // Drag n' drop
  358.     virtual CImageList* CreateDragImage(CPoint *pHotSpot);    // no longer necessary
  359.     // Mouse Clicks
  360.     virtual void  OnFixedColumnClick(CCellID& cell);
  361.     virtual void  OnFixedRowClick(CCellID& cell);
  362.     // Editing
  363.     virtual CSize GetCellExtent(int nRow, int nCol, CDC* pDC);
  364.     virtual void  OnEndEditCell(int nRow, int nCol, CString str);
  365.     virtual void  OnEditCell(int nRow, int nCol, UINT nChar);
  366.     virtual void  CreateInPlaceEditControl(CRect& rect, DWORD dwStyle, UINT nID,
  367.                                            int nRow, int nCol,
  368.                                            LPCTSTR szText, int nChar);
  369.     // Drawing
  370.     virtual void  OnDraw(CDC* pDC);
  371.     virtual BOOL  DrawFixedCell(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBk=FALSE);
  372.     virtual BOOL  DrawCell(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBk=FALSE);
  373.     // GridCell Creation and Cleanup
  374.     virtual CGridCell* CreateCell(int nRow, int nCol);
  375.     virtual void EmptyCell(CGridCell* pCell, int nRow, int nCol);
  376. // Attributes
  377. protected:
  378.     // General attributes
  379.     COLORREF    m_crTextColour, m_crTextBkColour, m_crBkColour,   // Grid colours
  380.                 m_crFixedTextColour, m_crFixedBkColour, m_crGridColour;
  381.     COLORREF    m_crWindowText, m_crWindowColour, m_cr3DFace,     // System colours
  382.                 m_crShadow;    
  383.     int         m_nGridLines;
  384.     BOOL        m_bEditable;
  385.     BOOL        m_bModified;
  386.     BOOL        m_bAllowDragAndDrop;
  387.     BOOL        m_bListMode;
  388.     BOOL        m_bAllowDraw;
  389.     BOOL        m_bEnableSelection;
  390.     BOOL        m_bSortOnClick;
  391.     BOOL        m_bHandleTabKey;
  392.     BOOL        m_bDoubleBuffer;
  393.     BOOL        m_bTitleTips;
  394.     // Cell size details
  395.     int         m_nRows, m_nFixedRows, m_nCols, m_nFixedCols;
  396.     CUIntArray  m_arRowHeights, m_arColWidths;
  397.     int         m_nMargin;
  398.     int         m_nDefCellWidth, m_nDefCellHeight;
  399.     int         m_nVScrollMax, m_nHScrollMax;
  400.     // Fonts and images
  401.     LOGFONT     m_Logfont;
  402.     CFont       m_PrinterFont,  // for the printer
  403.                 m_Font;         // for the grid
  404.     CImageList* m_pImageList;
  405.     // Cell data
  406.     CTypedPtrArray<CObArray, GRID_ROW*> m_RowData;
  407.     // Mouse operations such as cell selection
  408.     int         m_MouseMode;
  409.     CPoint      m_LeftClickDownPoint, m_LastMousePoint;
  410.     CCellID     m_LeftClickDownCell, m_SelectionStartCell;
  411.     CCellID     m_idCurrentCell;
  412.     int         m_nTimerID;
  413.     int         m_nTimerInterval;
  414.     int         m_nResizeCaptureRange;
  415.     BOOL        m_bAllowRowResize, m_bAllowColumnResize;
  416.     int         m_nRowsPerWheelNotch;
  417.     CMap<DWORD,DWORD, CCellID, CCellID&> m_SelectedCellMap, m_PrevSelectedCellMap;
  418. #ifdef GRIDCONTROL_USE_TITLETIPS
  419.     CTitleTip   m_TitleTip;             // Title tips for cells
  420. #endif
  421.     // Drag and drop
  422. BOOL m_bMustUninitOLE; // Do we need to uninitialise OLE?
  423.     CCellID     m_LastDragOverCell;
  424. #ifdef GRIDCONTROL_USE_OLE_DRAGDROP
  425.     CGridDropTarget m_DropTarget;       // OLE Drop target for the grid
  426. #endif
  427.     // Printing information
  428.     CSize       m_CharSize;
  429.     int         m_nPageHeight;
  430.     CSize       m_LogicalPageSize,      // Page size in gridctrl units.
  431.                 m_PaperSize;            // Page size in device units.
  432.     // sorting
  433.     int         m_bAscending;
  434.     int         m_SortColumn;
  435. protected:
  436.     void SelectAllCells();
  437.     void SelectColumns(CCellID currentCell);
  438.     void SelectRows(CCellID currentCell);
  439.     void SelectCells(CCellID currentCell);
  440.     void OnSelecting(const CCellID& currentCell);
  441.     // Generated message map functions
  442.     //{{AFX_MSG(CGridCtrl)
  443.     afx_msg void OnPaint();
  444.     afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  445.     afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  446.     afx_msg void OnSize(UINT nType, int cx, int cy);
  447.     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  448.     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  449.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  450.     afx_msg void OnTimer(UINT nIDEvent);
  451.     afx_msg UINT OnGetDlgCode();
  452.     afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  453.     afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  454.     afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  455.     afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  456.     afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  457.     afx_msg void OnSysColorChange();
  458.     afx_msg void OnCaptureChanged(CWnd *pWnd);
  459. afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
  460. afx_msg void OnUpdateEditCut(CCmdUI* pCmdUI);
  461. afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);
  462. afx_msg void OnUpdateEditSelectAll(CCmdUI* pCmdUI);
  463. //}}AFX_MSG
  464. #if _MFC_VER >= 0x0421
  465.     afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
  466.     afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  467. #endif
  468.     afx_msg LRESULT OnSetFont(WPARAM hFont, LPARAM lParam);
  469.     afx_msg LRESULT OnGetFont(WPARAM hFont, LPARAM lParam);
  470.     afx_msg void OnEndInPlaceEdit(NMHDR* pNMHDR, LRESULT* pResult);
  471.     DECLARE_MESSAGE_MAP()
  472.     enum eMouseModes { MOUSE_NOTHING, MOUSE_SELECT_ALL, MOUSE_SELECT_COL, MOUSE_SELECT_ROW,
  473.                        MOUSE_SELECT_CELLS, MOUSE_SCROLLING_CELLS,
  474.                        MOUSE_OVER_ROW_DIVIDE, MOUSE_SIZING_ROW, 
  475.                        MOUSE_OVER_COL_DIVIDE, MOUSE_SIZING_COL,
  476.                        MOUSE_PREPARE_EDIT, MOUSE_PREPARE_DRAG, MOUSE_DRAGGING};
  477. };
  478. inline CGridCell* CGridCtrl::GetCell(int nRow, int nCol) const
  479. {
  480.     if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) return NULL;
  481.     GRID_ROW* pRow = m_RowData[nRow];
  482.     if (!pRow) return NULL;
  483.     return pRow->GetAt(nCol);
  484. }
  485. inline BOOL CGridCtrl::SetCell(int nRow, int nCol, CGridCell* pCell)
  486. {
  487.     if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) return FALSE;
  488.     GRID_ROW* pRow = m_RowData[nRow];
  489.     if (!pRow) return FALSE;
  490.     pRow->SetAt(nCol, pCell);
  491.     return TRUE;
  492. }
  493. /////////////////////////////////////////////////////////////////////////////
  494. //{{AFX_INSERT_LOCATION}}
  495. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  496. #endif // !defined(AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)