Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
872
Server/ManageTool/GridControl/GridCtrl_src/GridCtrl.h
Normal file
872
Server/ManageTool/GridControl/GridCtrl_src/GridCtrl.h
Normal file
@@ -0,0 +1,872 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// GridCtrl.h : header file
|
||||
//
|
||||
// MFC Grid Control - main header
|
||||
//
|
||||
// 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_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 "CellRange.h"
|
||||
#include "GridCell.h"
|
||||
#include <afxtempl.h>
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// 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("MFCGridCtrl") // 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 tagNM_GRIDVIEW {
|
||||
NMHDR hdr;
|
||||
int iRow;
|
||||
int iColumn;
|
||||
} NM_GRIDVIEW;
|
||||
|
||||
// This is sent to the Grid from child in-place edit controls
|
||||
typedef struct tagGV_DISPINFO {
|
||||
NMHDR hdr;
|
||||
GV_ITEM item;
|
||||
} GV_DISPINFO;
|
||||
|
||||
// This is sent to the Grid from child in-place edit controls
|
||||
typedef struct 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 CGridCtrl;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CGridCtrl window
|
||||
|
||||
class AFX_EXT_CLASS CGridCtrl : public CWnd
|
||||
{
|
||||
DECLARE_DYNCREATE(CGridCtrl)
|
||||
friend class CGridCell;
|
||||
friend class CGridCellBase;
|
||||
|
||||
// Construction
|
||||
public:
|
||||
CGridCtrl(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 ~CGridCtrl();
|
||||
|
||||
protected:
|
||||
BOOL RegisterWindowClass();
|
||||
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);
|
||||
|
||||
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 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 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
|
||||
};
|
||||
};
|
||||
|
||||
// Returns the default cell implementation for the given grid region
|
||||
inline CGridCellBase* CGridCtrl::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* CGridCtrl::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_pfnCallback)
|
||||
m_pfnCallback(&gvdi, m_lParam);
|
||||
else
|
||||
SendDisplayRequestToParent(&gvdi);
|
||||
|
||||
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((CGridCtrl*)this);
|
||||
|
||||
return (CGridCellBase*) &cell;
|
||||
}
|
||||
|
||||
GRID_ROW* pRow = m_RowData[nRow];
|
||||
if (!pRow) return NULL;
|
||||
return pRow->GetAt(nCol);
|
||||
}
|
||||
|
||||
inline BOOL CGridCtrl::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_)
|
||||
Reference in New Issue
Block a user