From e5d448c95b18b46068453fa95527f1de1f7f0d45 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 02 十二月 2024 08:29:28 +0800
Subject: [PATCH] Merge branch 'liuyang' into clh
---
SourceCode/Bond/BondEq/Resource.h | 0
SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h | 28
SourceCode/Bond/BondEq/CProjectPageComponents.cpp | 2
SourceCode/Bond/BondEq/UserManagerDlg.h | 47
SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h | 82 +
SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj | 3
SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h | 68 +
SourceCode/Bond/BondEq/BondEq.vcxproj | 5
SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h | 55 +
SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h | 143 ++
SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h | 172 +++
SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h | 178 +++
SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h | 92 +
SourceCode/Bond/BondEq/UserManagerDlg.cpp | 498 +++++++++
SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h | 106 ++
SourceCode/Bond/BondEq/stdafx.h | 20
SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h | 156 +++
SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h | 26
SourceCode/Bond/BondEq/BondEqDlg.cpp | 18
SourceCode/Bond/x64/Debug/Config/BondEq.db | 0
SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h | 83 +
SourceCode/Bond/BLControlsSDK/include/CellCtrl.h | 80
SourceCode/Bond/BondEq/DBManager/UserManager.cpp | 29
/dev/null | 0
Document/Bond Server-Connect Function Manual.pdf | 0
Document/Bond软件开发进度表.xlsx | 0
SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h | 87 +
SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h | 1088 ++++++++++++++++++++
28 files changed, 3,001 insertions(+), 65 deletions(-)
diff --git a/Document/Bond Server-Connect Function Manual.pdf b/Document/Bond Server-Connect Function Manual.pdf
new file mode 100644
index 0000000..209be18
--- /dev/null
+++ b/Document/Bond Server-Connect Function Manual.pdf
Binary files differ
diff --git "a/Document/Bond\350\275\257\344\273\266\345\274\200\345\217\221\350\277\233\345\272\246\350\241\250.xlsx" "b/Document/Bond\350\275\257\344\273\266\345\274\200\345\217\221\350\277\233\345\272\246\350\241\250.xlsx"
index 6a86957..7a4d235 100644
--- "a/Document/Bond\350\275\257\344\273\266\345\274\200\345\217\221\350\277\233\345\272\246\350\241\250.xlsx"
+++ "b/Document/Bond\350\275\257\344\273\266\345\274\200\345\217\221\350\277\233\345\272\246\350\241\250.xlsx"
Binary files differ
diff --git a/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj b/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj
index ea54226..e1f23d9 100644
--- a/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj
+++ b/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj
@@ -199,7 +199,8 @@
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<PostBuildEvent>
- <Command>copy "$(SolutionDir)$(ProjectName)\IEquipment.h" "$(SolutionDir)BEQLibrarySDK\Include\IEquipment.h"
+ <Command>mkdir "$(SolutionDir)BEQLibrarySDK\lib\$(Platform)\$(Configuration)" 2>nul
+copy "$(SolutionDir)$(ProjectName)\IEquipment.h" "$(SolutionDir)BEQLibrarySDK\Include\IEquipment.h"
copy "$(SolutionDir)$(ProjectName)\IRemoteEquipment.h" "$(SolutionDir)BEQLibrarySDK\Include\IRemoteEquipment.h"
copy "$(SolutionDir)$(ProjectName)\IUnit.h" "$(SolutionDir)BEQLibrarySDK\Include\IUnit.h"
copy "$(SolutionDir)$(ProjectName)\IServo.h" "$(SolutionDir)BEQLibrarySDK\Include\IServo.h"
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h b/SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h
new file mode 100644
index 0000000..ca429b5
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////
+// CellRange.h: header file
+//
+// MFC Grid Control - interface for the CCellRange class.
+//
+// Written by Chris Maunder <cmaunder@mail.com>
+// Copyright (c) 1998-2002. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is
+// not sold for profit without the authors written consent, and
+// providing that this notice and the authors name and all copyright
+// notices remains intact.
+//
+// An email letting me know how you are using it would be nice as well.
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.20+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+// The code contained in this file is based on the original
+// WorldCom Grid control written by Joe Willcoxson,
+// mailto:chinajoe@aol.com
+// http://users.aol.com/chinajoe
+
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+class AFX_EXT_CLASS CCellID
+{
+// Attributes
+public:
+ int row, col;
+
+// Operations
+public:
+ explicit CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {}
+
+ int IsValid() const { return (row >= 0 && col >= 0); }
+ int operator==(const CCellID& rhs) const { return (row == rhs.row && col == rhs.col); }
+ int operator!=(const CCellID& rhs) const { return !operator==(rhs); }
+};
+
+class CCellRange
+{
+public:
+
+ CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1)
+ {
+ Set(nMinRow, nMinCol, nMaxRow, nMaxCol);
+ }
+
+ void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1);
+
+ int IsValid() const;
+ int InRange(int row, int col) const;
+ int InRange(const CCellID& cellID) const;
+ int Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); }
+
+ CCellID GetTopLeft() const;
+ CCellRange Intersect(const CCellRange& rhs) const;
+
+ int GetMinRow() const {return m_nMinRow;}
+ void SetMinRow(int minRow) {m_nMinRow = minRow;}
+
+ int GetMinCol() const {return m_nMinCol;}
+ void SetMinCol(int minCol) {m_nMinCol = minCol;}
+
+ int GetMaxRow() const {return m_nMaxRow;}
+ void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;}
+
+ int GetMaxCol() const {return m_nMaxCol;}
+ void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;}
+
+ int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;}
+ int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;}
+
+ void operator=(const CCellRange& rhs);
+ int operator==(const CCellRange& rhs);
+ int operator!=(const CCellRange& rhs);
+
+protected:
+ int m_nMinRow;
+ int m_nMinCol;
+ int m_nMaxRow;
+ int m_nMaxCol;
+};
+
+inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol)
+{
+ m_nMinRow = minRow;
+ m_nMinCol = minCol;
+ m_nMaxRow = maxRow;
+ m_nMaxCol = maxCol;
+}
+
+inline void CCellRange::operator=(const CCellRange& rhs)
+{
+ if (this != &rhs) Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol);
+}
+
+inline int CCellRange::operator==(const CCellRange& rhs)
+{
+ return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) &&
+ (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol));
+}
+
+inline int CCellRange::operator!=(const CCellRange& rhs)
+{
+ return !operator==(rhs);
+}
+
+inline int CCellRange::IsValid() const
+{
+ return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 &&
+ m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol);
+}
+
+inline int CCellRange::InRange(int row, int col) const
+{
+ return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol);
+}
+
+inline int CCellRange::InRange(const CCellID& cellID) const
+{
+ return InRange(cellID.row, cellID.col);
+}
+
+inline CCellID CCellRange::GetTopLeft() const
+{
+ return CCellID(m_nMinRow, m_nMinCol);
+}
+
+inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const
+{
+ return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol),
+ min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol));
+}
+
+#endif // !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h
new file mode 100644
index 0000000..05a368f
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h
@@ -0,0 +1,143 @@
+/////////////////////////////////////////////////////////////////////////////
+// GridCell.h : header file
+//
+// MFC Grid Control - Grid cell class header file
+//
+// 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_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+class CGridCtrl;
+#include "GridCellBase.h"
+
+// Each cell contains one of these. Fields "row" and "column" are not stored since we
+// will usually have acces to them in other ways, and they are an extra 8 bytes per
+// cell that is probably unnecessary.
+
+class AFX_EXT_CLASS CGridCell : public CGridCellBase
+{
+ friend class CGridCtrl;
+ DECLARE_DYNCREATE(CGridCell)
+
+// Construction/Destruction
+public:
+ CGridCell();
+ virtual ~CGridCell();
+
+// Attributes
+public:
+ void operator=(const CGridCell& cell);
+
+ virtual void SetText(LPCTSTR szText) { m_strText = szText; }
+ virtual void SetImage(int nImage) { m_nImage = nImage; }
+ virtual void SetData(LPARAM lParam) { m_lParam = lParam; }
+ virtual void SetGrid(CGridCtrl* pGrid) { m_pGrid = pGrid; }
+ // virtual void SetState(const DWORD nState); - use base class version
+ virtual void SetFormat(DWORD nFormat) { m_nFormat = nFormat; }
+ virtual void SetTextClr(COLORREF clr) { m_crFgClr = clr; }
+ virtual void SetBackClr(COLORREF clr) { m_crBkClr = clr; }
+ virtual void SetFont(const LOGFONT* plf);
+ virtual void SetMargin(UINT nMargin) { m_nMargin = nMargin; }
+ virtual CWnd* GetEditWnd() const { return m_pEditWnd; }
+ virtual void SetCoords(int /*nRow*/, int /*nCol*/) {} // don't need to know the row and
+ // column for base implementation
+
+ virtual LPCTSTR GetText() const { return (m_strText.IsEmpty())? _T("") : LPCTSTR(m_strText); }
+ virtual int GetImage() const { return m_nImage; }
+ virtual LPARAM GetData() const { return m_lParam; }
+ virtual CGridCtrl* GetGrid() const { return m_pGrid; }
+ // virtual DWORD GetState() const - use base class
+ virtual DWORD GetFormat() const;
+ virtual COLORREF GetTextClr() const { return m_crFgClr; } // TODO: change to use default cell
+ virtual COLORREF GetBackClr() const { return m_crBkClr; }
+ virtual LOGFONT* GetFont() const;
+ virtual CFont* GetFontObject() const;
+ virtual UINT GetMargin() const;
+
+ virtual BOOL IsEditing() const { return m_bEditing; }
+ virtual BOOL IsDefaultFont() const { return (m_plfFont == NULL); }
+ virtual void Reset();
+
+// editing cells
+public:
+ virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+ virtual void EndEdit();
+protected:
+ virtual void OnEndEdit();
+
+protected:
+ CString m_strText; // Cell text (or binary data if you wish...)
+ LPARAM m_lParam; // 32-bit value to associate with item
+ int m_nImage; // Index of the list view item抯 icon
+ DWORD m_nFormat;
+ COLORREF m_crFgClr;
+ COLORREF m_crBkClr;
+ LOGFONT* m_plfFont;
+ UINT m_nMargin;
+
+ BOOL m_bEditing; // Cell being edited?
+
+ CGridCtrl* m_pGrid; // Parent grid control
+ CWnd* m_pEditWnd;
+};
+
+// This class is for storing grid default values. It's a little heavy weight, so
+// don't use it in bulk
+class CGridDefaultCell : public CGridCell
+{
+ DECLARE_DYNCREATE(CGridDefaultCell)
+
+// Construction/Destruction
+public:
+ CGridDefaultCell();
+ virtual ~CGridDefaultCell();
+
+public:
+ virtual DWORD GetStyle() const { return m_dwStyle; }
+ virtual void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; }
+ virtual int GetWidth() const { return m_Size.cx; }
+ virtual int GetHeight() const { return m_Size.cy; }
+ virtual void SetWidth(int nWidth) { m_Size.cx = nWidth; }
+ virtual void SetHeight(int nHeight) { m_Size.cy = nHeight; }
+
+ // Disable these properties
+ virtual void SetData(LPARAM /*lParam*/) { ASSERT(FALSE); }
+ virtual void SetState(DWORD /*nState*/) { ASSERT(FALSE); }
+ virtual DWORD GetState() const { return CGridCell::GetState()|GVIS_READONLY; }
+ virtual void SetCoords( int /*row*/, int /*col*/) { /*ASSERT(FALSE);*/ }
+ virtual void SetFont(const LOGFONT* /*plf*/);
+ virtual LOGFONT* GetFont() const;
+ virtual CFont* GetFontObject() const;
+
+protected:
+ CSize m_Size; // Default Size
+ CFont m_Font; // Cached font
+ DWORD m_dwStyle; // Cell Style - unused
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h
new file mode 100644
index 0000000..f7804c2
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h
@@ -0,0 +1,172 @@
+/////////////////////////////////////////////////////////////////////////////
+// GridCellBase.h : header file
+//
+// MFC Grid Control - Grid cell base class header file
+//
+// 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.22+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+class CGridCtrl;
+
+// Cell states
+#define GVIS_FOCUSED 0x0001
+#define GVIS_SELECTED 0x0002
+#define GVIS_DROPHILITED 0x0004
+#define GVIS_READONLY 0x0008
+#define GVIS_FIXED 0x0010
+#define GVIS_FIXEDROW 0x0020
+#define GVIS_FIXEDCOL 0x0040
+#define GVIS_MODIFIED 0x0080
+
+// Cell data mask
+#define GVIF_TEXT LVIF_TEXT
+#define GVIF_IMAGE LVIF_IMAGE
+#define GVIF_PARAM LVIF_PARAM
+#define GVIF_STATE LVIF_STATE
+#define GVIF_BKCLR (GVIF_STATE<<1)
+#define GVIF_FGCLR (GVIF_STATE<<2)
+#define GVIF_FORMAT (GVIF_STATE<<3)
+#define GVIF_FONT (GVIF_STATE<<4)
+#define GVIF_MARGIN (GVIF_STATE<<5)
+#define GVIF_ALL (GVIF_TEXT|GVIF_IMAGE|GVIF_PARAM|GVIF_STATE|GVIF_BKCLR|GVIF_FGCLR| \
+ GVIF_FORMAT|GVIF_FONT|GVIF_MARGIN)
+
+// Used for Get/SetItem calls.
+typedef struct _GV_ITEM {
+ int row,col; // Row and Column of item
+ UINT mask; // Mask for use in getting/setting cell data
+ UINT nState; // cell state (focus/hilighted etc)
+ DWORD nFormat; // Format of cell
+ int iImage; // index of the list view item抯 icon
+ COLORREF crBkClr; // Background colour (or CLR_DEFAULT)
+ COLORREF crFgClr; // Forground colour (or CLR_DEFAULT)
+ LPARAM lParam; // 32-bit value to associate with item
+ LOGFONT lfFont; // Cell font
+ UINT nMargin; // Internal cell margin
+ CString strText; // Text in cell
+} GV_ITEM;
+
+
+// Each cell contains one of these. Fields "row" and "column" are not stored since we
+// will usually have acces to them in other ways, and they are an extra 8 bytes per
+// cell that is probably unnecessary.
+
+class AFX_EXT_CLASS CGridCellBase : public CObject
+{
+ friend class CGridCtrl;
+ DECLARE_DYNAMIC(CGridCellBase)
+
+// Construction/Destruction
+public:
+ CGridCellBase();
+ virtual ~CGridCellBase();
+
+// Attributes
+public:
+ virtual void SetText(LPCTSTR /* szText */) = 0 ;
+ virtual void SetImage(int /* nImage */) = 0 ;
+ virtual void SetData(LPARAM /* lParam */) = 0 ;
+ virtual void SetState(DWORD nState) { m_nState = nState; }
+ virtual void SetFormat(DWORD /* nFormat */) = 0 ;
+ virtual void SetTextClr(COLORREF /* clr */) = 0 ;
+ virtual void SetBackClr(COLORREF /* clr */) = 0 ;
+ virtual void SetFont(const LOGFONT* /* plf */) = 0 ;
+ virtual void SetMargin( UINT /* nMargin */) = 0 ;
+ virtual void SetGrid(CGridCtrl* /* pGrid */) = 0 ;
+ virtual void SetCoords( int /* nRow */, int /* nCol */) = 0 ;
+
+ virtual LPCTSTR GetText() const = 0 ;
+ virtual LPCTSTR GetTipText() const { return GetText(); } // may override TitleTip return
+ virtual int GetImage() const = 0 ;
+ virtual LPARAM GetData() const = 0 ;
+ virtual DWORD GetState() const { return m_nState; }
+ virtual DWORD GetFormat() const = 0 ;
+ virtual COLORREF GetTextClr() const = 0 ;
+ virtual COLORREF GetBackClr() const = 0 ;
+ virtual LOGFONT * GetFont() const = 0 ;
+ virtual CFont * GetFontObject() const = 0 ;
+ virtual CGridCtrl* GetGrid() const = 0 ;
+ virtual CWnd * GetEditWnd() const = 0 ;
+ virtual UINT GetMargin() const = 0 ;
+
+ virtual CGridCellBase* GetDefaultCell() const;
+
+ virtual BOOL IsDefaultFont() const = 0 ;
+ virtual BOOL IsEditing() const = 0 ;
+ virtual BOOL IsFocused() const { return (m_nState & GVIS_FOCUSED); }
+ virtual BOOL IsFixed() const { return (m_nState & GVIS_FIXED); }
+ virtual BOOL IsFixedCol() const { return (m_nState & GVIS_FIXEDCOL); }
+ virtual BOOL IsFixedRow() const { return (m_nState & GVIS_FIXEDROW); }
+ virtual BOOL IsSelected() const { return (m_nState & GVIS_SELECTED); }
+ virtual BOOL IsReadOnly() const { return (m_nState & GVIS_READONLY); }
+ virtual BOOL IsModified() const { return (m_nState & GVIS_MODIFIED); }
+ virtual BOOL IsDropHighlighted() const { return (m_nState & GVIS_DROPHILITED); }
+
+// Operators
+public:
+ virtual void operator=(const CGridCellBase& cell);
+
+// Operations
+public:
+ virtual void Reset();
+
+ virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+ virtual BOOL GetTextRect( LPRECT pRect); // i/o: i=dims of cell rect; o=dims of text rect
+ virtual BOOL GetTipTextRect( LPRECT pRect) { return GetTextRect( pRect); } // may override for btns, etc.
+ virtual CSize GetTextExtent(LPCTSTR str, CDC* pDC = NULL);
+ virtual CSize GetCellExtent(CDC* pDC);
+
+ // Editing
+ virtual BOOL Edit( int /* nRow */, int /* nCol */, CRect /* rect */, CPoint /* point */,
+ UINT /* nID */, UINT /* nChar */) { return FALSE;}
+ virtual BOOL ValidateEdit(LPCTSTR str);
+ virtual void EndEdit() {}
+
+ // EFW - Added to print cells properly
+ virtual BOOL PrintCell(CDC* pDC, int nRow, int nCol, CRect rect);
+
+ // add additional protected grid members required of cells
+ LRESULT SendMessageToParent(int nRow, int nCol, int nMessage);
+
+protected:
+ virtual void OnEndEdit();
+ virtual void OnMouseEnter();
+ virtual void OnMouseOver();
+ virtual void OnMouseLeave();
+ virtual void OnClick( CPoint PointCellRelative);
+ virtual void OnClickDown( CPoint PointCellRelative);
+ virtual void OnRClick( CPoint PointCellRelative);
+ virtual void OnDblClick( CPoint PointCellRelative);
+ virtual BOOL OnSetCursor();
+
+protected:
+ DWORD m_nState; // Cell state (selected/focus etc)
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h
new file mode 100644
index 0000000..6b04419
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h
@@ -0,0 +1,28 @@
+#ifndef __GRID_CELL_BUTTON__
+#define __GRID_CELL_BUTTON__
+
+#include "GridCell.h"
+
+class AFX_EXT_CLASS CGridCellButton : public CGridCell
+{
+ friend class CGridCtrl;
+ DECLARE_DYNCREATE(CGridCellButton)
+
+public:
+ CGridCellButton(void);
+ virtual ~CGridCellButton(void);
+
+ void SetPushing(BOOL bPush) {m_bPushing = bPush;}
+
+public:
+ virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+
+protected:
+ virtual void OnClick(CPoint PointCellRelative);
+ virtual void OnMouseLeave();
+
+protected:
+ CRect m_rect;
+ BOOL m_bPushing;
+};
+#endif
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h
new file mode 100644
index 0000000..286c9db
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h
@@ -0,0 +1,1088 @@
+/////////////////////////////////////////////////////////////////////////////
+// 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+
+//
+//////////////////////////////////////////////////////////////////////
+
+// FEATURES BY Mukit, Ataul (2007-11-17):
+// 1. Merge Cell
+// 2. Ability to do XL Style Freeze Pane
+// 3. The Horizontal Gray Area Removed
+
+// FINDINGS:
+// 1. A cell cannot be edited if a tooltip is shown..
+// 2. The InplaceEditCtrl is not multiline even if a cell can contain Multiline Text..
+// 3. If a cell is too small, the InplaceEditCtrl is almost invisible..
+
+#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>
+#include <vector>
+using namespace std;
+
+
+struct CELL_ENABLE
+{
+ CELL_ENABLE()
+ {
+ nEnable = -1;
+ }
+ void SetEnable(BOOL bValue)
+ {
+ nEnable = bValue;
+ }
+ BOOL isEnable()
+ {
+ if (nEnable == 0)
+ {
+ return FALSE;
+ }
+ else if (nEnable > 0)
+ {
+ return TRUE;
+ }
+ }
+ BOOL isActivated()
+ {
+ if (nEnable < 0)
+ {
+ return FALSE;
+ }
+ else
+ return TRUE;
+ }
+ int nEnable;
+};
+
+///////////////////////////////////////////////////////////////////////////////////
+// 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
+// LUC
+#define GVNI_FREEZED 0x0040
+
+#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
+#define GVN_COMBOSELCHANGE LVN_FIRST-10
+
+class CGridCtrl;
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridCtrl window
+
+typedef bool (*PVIRTUALCOMPARE)(int, int);
+
+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:
+
+///// LUC ///////////////////////////////////////////////////////////////////////
+
+ //// LUC : MergeCell////////
+
+ INT_PTR MergeCells(CCellRange& mergedCellRange);
+ void SplitCells(INT_PTR nMergeID);
+
+ BOOL IsMergedCell(int row, int col, CCellRange& mergedCellRange);
+ BOOL GetMergedCellRect(int row, int col, CRect& rect);
+ BOOL GetMergedCellRect(CCellRange& mergedCell, CRect& rect);
+ BOOL GetTopLeftMergedCell(int& row, int& col, CRect& mergeRect);
+ BOOL GetBottomRightMergedCell(int& row, int& col, CRect& mergeRect);
+ virtual BOOL IsFocused(CGridCellBase& cell, int nRow, int nCol);
+ virtual BOOL IsSelected(CGridCellBase& cell, int nRow, int nCol);
+
+ BOOL m_bDrawingMergedCell;
+ INT_PTR m_nCurrentMergeID;
+
+ static CRect rectNull;
+ static CCellID cellNull;
+
+ // LUC : Freeze Rows
+
+ BOOL SetFreezedRowCount(int nFreezedRows)
+ {
+ BOOL bRet = FALSE;
+ if( (nFreezedRows >= 0) && ((nFreezedRows + m_nFixedRows) <= m_nRows) )
+ {
+ m_nFreezedRows = nFreezedRows;
+ ResetScrollBars();
+ Refresh();
+ bRet = TRUE;
+ }
+
+ return bRet;
+
+ }
+
+ BOOL SetFreezedColumnCount(int nFreezedCols)
+ {
+ BOOL bRet = FALSE;
+ if( (nFreezedCols >= 0) && ((nFreezedCols + m_nFixedCols) <= m_nCols) )
+ {
+ m_nFreezedCols = nFreezedCols;
+ ResetScrollBars();
+ Refresh();
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+ // To avoid calling ResetScrollBars twice you can use SetFreezedFrame
+ BOOL SetFreezedFrame(int nFreezedRows, int nFreezedCols)
+ {
+ BOOL bRet = FALSE;
+ if( (nFreezedRows >= 0) && ((nFreezedRows + m_nFixedRows) <= m_nRows) )
+ {
+ m_nFreezedRows = nFreezedRows;
+ bRet = TRUE;
+ }
+ if( (nFreezedCols >= 0) && ((nFreezedCols + m_nFixedCols) <= m_nCols) )
+ {
+ m_nFreezedCols = nFreezedCols;
+ bRet = TRUE;
+ }
+ else
+ {
+ bRet = FALSE;
+ }
+
+ ResetScrollBars();
+
+ return bRet;
+ }
+
+ int GetFreezedRowCount() const { return m_nFreezedRows; }
+ int GetFreezedColumnCount() const { return m_nFreezedCols; }
+
+ void ShowHorzNonGridArea(BOOL bShow)
+ {
+ m_bShowHorzNonGridArea = bShow;
+ }
+
+ BOOL IsShowingHorzNonGridArea()
+ {
+ return m_bShowHorzNonGridArea;
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+ int GetRowCount() const { return m_nRows; }
+ int GetColumnCount() const { return m_nCols; }
+ int GetFixedRowCount(BOOL bIncludeFreezedRows = FALSE) const
+ {
+ return (bIncludeFreezedRows) ? (m_nFixedRows + m_nFreezedRows) : m_nFixedRows;
+ }
+ int GetFixedColumnCount(BOOL bIncludeFreezedCols = FALSE) const
+ {
+ return (bIncludeFreezedCols) ? (m_nFixedCols + m_nFreezedCols) : m_nFixedCols;
+ }
+
+ BOOL SetRowCount(int nRows = 10);
+ BOOL SetColumnCount(int nCols = 10);
+
+ BOOL UpdateCellEditableMask();
+
+ BOOL SetFixedRowCount(int nFixedRows = 1);
+ BOOL SetFixedColumnCount(int nFixedCols = 1);
+
+public:
+ 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);
+
+ BOOL SetCellMaskEditable(int nRow, int nCol, BOOL bEditable);
+ BOOL isCellMaskEditable(int nRow, int nCol);
+ BOOL isCellMaskActivated(int nRow, int nCol);
+
+ // LUC
+ // Change for MergeCell
+ CCellID GetCellFromPt(CPoint point, BOOL bAllowFixedCellCheck = TRUE, CCellID& cellOriginal = cellNull);
+
+ // LUC
+ //int GetFixedRowHeight() const;
+ //int GetFixedColumnWidth() const;
+ int GetFixedRowHeight(BOOL bIncludeFreezedRows = FALSE) const;
+ int GetFixedColumnWidth(BOOL bIncludeFreezedCols = FALSE) 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);
+ // LUC
+ 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 enable
+ vector<vector<CELL_ENABLE>> m_pCellEnable;
+
+ // Cell size details
+ int m_nRows, m_nFixedRows, m_nCols, m_nFixedCols;
+ // LUC
+ int m_nFreezedRows, m_nFreezedCols;
+ BOOL m_bExcludeFreezedRowsFromSelection;
+ BOOL m_bExcludeFreezedColsFromSelection;
+
+ // LUC
+ CArray<CCellRange, CCellRange&> m_arMergedCells;
+ // LUC
+ BOOL m_bShowHorzNonGridArea;
+
+ 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);
+ afx_msg void OnComboSelChange(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 CGridCtrl* 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* 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_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((CGridCtrl*)this);
+
+ return (CGridCellBase*) &cell;
+ }
+
+ GRID_ROW* pRow = m_RowData[nRow];
+ if (!pRow) return NULL;
+ if(pRow->GetData() == NULL)
+ return NULL;
+ return pRow->GetAt(m_arColOrder[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_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h
new file mode 100644
index 0000000..1fe5887
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h
@@ -0,0 +1,82 @@
+//////////////////////////////////////////////////////////////////////
+// GridDropTarget.h : header file
+//
+// MFC Grid Control - Drag/Drop target implementation
+//
+// 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.10+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_)
+#define AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+
+#include <afxole.h>
+
+class CGridCtrl;
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridDropTarget command target
+
+class AFX_EXT_CLASS CGridDropTarget : public COleDropTarget
+{
+public:
+ CGridDropTarget();
+ virtual ~CGridDropTarget();
+
+// Attributes
+public:
+ CGridCtrl* m_pGridCtrl;
+ BOOL m_bRegistered;
+
+// Operations
+public:
+ BOOL Register(CGridCtrl *pGridCtrl);
+ virtual void Revoke();
+
+ BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
+ DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+ void OnDragLeave(CWnd* pWnd);
+ DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+ DROPEFFECT OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point);
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CGridDropTarget)
+ //}}AFX_VIRTUAL
+
+// Implementation
+protected:
+
+ // Generated message map functions
+ //{{AFX_MSG(CGridDropTarget)
+ //}}AFX_MSG
+
+ DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h
new file mode 100644
index 0000000..b26b207
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h
@@ -0,0 +1,83 @@
+//////////////////////////////////////////////////////////////////////
+// InPlaceEdit.h : header file
+//
+// MFC Grid Control - inplace editing class
+//
+// 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.10+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+class CGridInPlaceEdit : public CEdit
+{
+// Construction
+public:
+ CGridInPlaceEdit(CWnd* pParent, CRect& rect, DWORD dwStyle, UINT nID,
+ int nRow, int nColumn, CString sInitText, UINT nFirstChar);
+
+// Attributes
+public:
+
+// Operations
+public:
+ void EndEdit();
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CGridInPlaceEdit)
+ public:
+ virtual BOOL PreTranslateMessage(MSG* pMsg);
+ protected:
+ virtual void PostNcDestroy();
+ //}}AFX_VIRTUAL
+
+// Implementation
+public:
+ virtual ~CGridInPlaceEdit();
+
+// Generated message map functions
+protected:
+ //{{AFX_MSG(CGridInPlaceEdit)
+ afx_msg void OnKillFocus(CWnd* pNewWnd);
+ afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
+ afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+ afx_msg UINT OnGetDlgCode();
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
+
+private:
+ int m_nRow;
+ int m_nColumn;
+ CString m_sInitText;
+ UINT m_nLastChar;
+ BOOL m_bExitOnArrows;
+ CRect m_Rect;
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h
new file mode 100644
index 0000000..f0f4894
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h
@@ -0,0 +1,106 @@
+#if !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+// MemDC.h : header file
+//
+
+//////////////////////////////////////////////////
+// CGridMemDC - memory DC
+//
+// Author: Keith Rule
+// Email: keithr@europa.com
+// Copyright 1996-1997, Keith Rule
+//
+// You may freely use or modify this code provided this
+// Copyright is included in all derived versions.
+//
+// History - 10/3/97 Fixed scrolling bug.
+// Added print support.
+// 25 feb 98 - fixed minor assertion bug
+//
+// This class implements a memory Device Context
+
+class CGridMemDC : public CDC
+{
+public:
+
+ // constructor sets up the memory DC
+ CGridMemDC(CDC* pDC) : CDC()
+ {
+// ASSERT(pDC != NULL);
+
+ m_pDC = pDC;
+ m_pOldBitmap = NULL;
+#ifndef _WIN32_WCE_NO_PRINTING
+ m_bMemDC = !pDC->IsPrinting();
+#else
+ m_bMemDC = FALSE;
+#endif
+
+ if (m_bMemDC) // Create a Memory DC
+ {
+ pDC->GetClipBox(&m_rect);
+ CreateCompatibleDC(pDC);
+ m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
+ m_pOldBitmap = SelectObject(&m_bitmap);
+#ifndef _WIN32_WCE
+ SetWindowOrg(m_rect.left, m_rect.top);
+#endif
+ // EFW - Bug fix - Fill background in case the user has overridden
+ // WM_ERASEBKGND. We end up with garbage otherwise.
+ // CJM - moved to fix a bug in the fix.
+ FillSolidRect(m_rect, pDC->GetBkColor());
+ }
+ else // Make a copy of the relevent parts of the current DC for printing
+ {
+#if !defined(_WIN32_WCE) || ((_WIN32_WCE > 201) && !defined(_WIN32_WCE_NO_PRINTING))
+ m_bPrinting = pDC->m_bPrinting;
+#endif
+ m_hDC = pDC->m_hDC;
+ m_hAttribDC = pDC->m_hAttribDC;
+ }
+
+ }
+
+ // Destructor copies the contents of the mem DC to the original DC
+ ~CGridMemDC()
+ {
+ if (m_bMemDC)
+ {
+ // Copy the offscreen bitmap onto the screen.
+ m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
+ this, m_rect.left, m_rect.top, SRCCOPY);
+
+ //Swap back the original bitmap.
+ SelectObject(m_pOldBitmap);
+ } else {
+ // All we need to do is replace the DC with an illegal value,
+ // this keeps us from accidently deleting the handles associated with
+ // the CDC that was passed to the constructor.
+ m_hDC = m_hAttribDC = NULL;
+ }
+ }
+
+ // Allow usage as a pointer
+ CGridMemDC* operator->() {return this;}
+
+ // Allow usage as a pointer
+ operator CGridMemDC*() {return this;}
+
+private:
+ CBitmap m_bitmap; // Offscreen bitmap
+ CBitmap* m_pOldBitmap; // bitmap originally found in CGridMemDC
+ CDC* m_pDC; // Saves CDC passed in constructor
+ CRect m_rect; // Rectangle of drawing area.
+ BOOL m_bMemDC; // TRUE if CDC really is a Memory DC.
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h
new file mode 100644
index 0000000..049cb44
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h
@@ -0,0 +1,68 @@
+#if !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCellCheck.h : header file
+//
+// MFC Grid Control - Grid combo cell class header file
+//
+// 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.22+
+//
+//////////////////////////////////////////////////////////////////////
+
+
+#include "..\\GridCell.h"
+
+
+class AFX_EXT_CLASS CGridCellCheck : public CGridCell
+{
+ friend class CGridCtrl;
+ DECLARE_DYNCREATE(CGridCellCheck)
+
+public:
+ CGridCellCheck();
+
+public:
+ BOOL SetCheck(BOOL bChecked = TRUE);
+ BOOL GetCheck();
+
+// Operations
+ virtual CSize GetCellExtent(CDC* pDC);
+ virtual void OnClick( CPoint PointCellRelative);
+ virtual BOOL GetTextRect( LPRECT pRect);
+
+protected:
+ CRect GetCheckPlacement();
+
+ virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+
+protected:
+ BOOL m_bChecked;
+ CRect m_Rect;
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h
new file mode 100644
index 0000000..bf436c3
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h
@@ -0,0 +1,178 @@
+#if !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCellCombo.h : header file
+//
+// MFC Grid Control - Grid combo cell class header file
+//
+// 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.10
+//
+//////////////////////////////////////////////////////////////////////
+
+
+#include "../GridCell.h"
+
+
+class AFX_EXT_CLASS CGridCellCombo : public CGridCell
+{
+ friend class CGridCtrl;
+ DECLARE_DYNCREATE(CGridCellCombo)
+
+public:
+ CGridCellCombo();
+
+// editing cells
+public:
+ virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+ virtual CWnd* GetEditWnd() const;
+ virtual void EndEdit();
+
+// Operations
+public:
+ virtual CSize GetCellExtent(CDC* pDC);
+
+// CGridCellCombo specific calls
+public:
+ void SetOptions(const CStringArray& ar);
+ void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; }
+ DWORD GetStyle() { return m_dwStyle; }
+
+protected:
+ virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+
+ CStringArray m_Strings;
+ DWORD m_dwStyle;
+};
+
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CComboEdit window
+
+#define IDC_COMBOEDIT 1001
+
+class CComboEdit : public CEdit
+{
+// Construction
+public:
+ CComboEdit();
+
+// Attributes
+public:
+
+// Operations
+public:
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CComboEdit)
+ virtual BOOL PreTranslateMessage(MSG* pMsg);
+ //}}AFX_VIRTUAL
+
+// Implementation
+public:
+ virtual ~CComboEdit();
+
+ // Generated message map functions
+protected:
+ //{{AFX_MSG(CComboEdit)
+ afx_msg void OnKillFocus(CWnd* pNewWnd);
+ afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+ afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+ //}}AFX_MSG
+
+ DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// CInPlaceList window
+
+class CInPlaceList : public CComboBox
+{
+ friend class CComboEdit;
+
+// Construction
+public:
+ CInPlaceList(CWnd* pParent, // parent
+ CRect& rect, // dimensions & location
+ DWORD dwStyle, // window/combobox style
+ UINT nID, // control ID
+ int nRow, int nColumn, // row and column
+ COLORREF crFore, COLORREF crBack, // Foreground, background colour
+ CStringArray& Items, // Items in list
+ CString sInitText, // initial selection
+ UINT nFirstChar); // first character to pass to control
+
+// Attributes
+public:
+ CComboEdit m_edit; // subclassed edit control
+
+// Operations
+public:
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CInPlaceList)
+ protected:
+ virtual void PostNcDestroy();
+ //}}AFX_VIRTUAL
+
+// Implementation
+public:
+ virtual ~CInPlaceList();
+ void EndEdit();
+
+protected:
+ int GetCorrectDropWidth();
+
+// Generated message map functions
+protected:
+ //{{AFX_MSG(CInPlaceList)
+ afx_msg void OnKillFocus(CWnd* pNewWnd);
+ afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+ afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+ afx_msg void OnDropdown();
+ afx_msg void OnSelChange();
+ afx_msg UINT OnGetDlgCode();
+ afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
+ //}}AFX_MSG
+ //afx_msg void OnSelendOK();
+
+ DECLARE_MESSAGE_MAP()
+
+private:
+ int m_nNumLines;
+ CString m_sInitText;
+ int m_nRow;
+ int m_nCol;
+ UINT m_nLastChar;
+ BOOL m_bExitOnArrows;
+ COLORREF m_crForeClr, m_crBackClr;
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h
new file mode 100644
index 0000000..a3d5a76
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h
@@ -0,0 +1,92 @@
+// GridCellDateTime.h: interface for the CGridCellDateTime class.
+//
+// Provides the implementation for a datetime picker cell type of the
+// grid control.
+//
+// For use with CGridCtrl v2.22+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_)
+#define AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "..\\GridCell.h"
+#include "afxdtctl.h" // for CDateTimeCtrl
+
+class CGridCellDateTime : public CGridCell
+{
+ friend class CGridCtrl;
+ DECLARE_DYNCREATE(CGridCellDateTime)
+
+ CTime m_cTime;
+ DWORD m_dwStyle;
+
+public:
+ CGridCellDateTime();
+ CGridCellDateTime(DWORD dwStyle);
+ virtual ~CGridCellDateTime();
+ virtual CSize GetCellExtent(CDC* pDC);
+
+ // editing cells
+public:
+ void Init(DWORD dwStyle);
+ virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+ virtual CWnd* GetEditWnd() const;
+ virtual void EndEdit();
+
+
+ CTime* GetTime() {return &m_cTime;};
+ void SetTime(CTime time);
+};
+
+class CInPlaceDateTime : public CDateTimeCtrl
+{
+// Construction
+public:
+ CInPlaceDateTime(CWnd* pParent, // parent
+ CRect& rect, // dimensions & location
+ DWORD dwStyle, // window/combobox style
+ UINT nID, // control ID
+ int nRow, int nColumn, // row and column
+ COLORREF crFore, COLORREF crBack, // Foreground, background colour
+ CTime* pcTime,
+ UINT nFirstChar); // first character to pass to control
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CInPlaceList)
+ protected:
+ virtual void PostNcDestroy();
+ //}}AFX_VIRTUAL
+
+// Implementation
+public:
+ virtual ~CInPlaceDateTime();
+ void EndEdit();
+
+// Generated message map functions
+protected:
+ //{{AFX_MSG(CInPlaceList)
+ afx_msg void OnKillFocus(CWnd* pNewWnd);
+ afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+ afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+ afx_msg UINT OnGetDlgCode();
+ //}}AFX_MSG
+ //afx_msg void OnSelendOK();
+
+ DECLARE_MESSAGE_MAP()
+
+private:
+ CTime* m_pcTime;
+ int m_nRow;
+ int m_nCol;
+ UINT m_nLastChar;
+ BOOL m_bExitOnArrows;
+ COLORREF m_crForeClr, m_crBackClr;
+};
+
+#endif // !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h
new file mode 100644
index 0000000..4efb7d7
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h
@@ -0,0 +1,26 @@
+// GridCellNumeric.h: interface for the CGridCellNumeric class.
+//
+// Written by Andrew Truckle [ajtruckle@wsatkins.co.uk]
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_)
+#define AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "..\\GridCell.h"
+
+class AFX_EXT_CLASS CGridCellNumeric : public CGridCell
+{
+ DECLARE_DYNCREATE(CGridCellNumeric)
+
+public:
+ virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+ virtual void EndEdit();
+
+};
+
+#endif // !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h
new file mode 100644
index 0000000..c3dffa0
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h
@@ -0,0 +1,55 @@
+// GridURLCell.h: interface for the CGridURLCell class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_)
+#define AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "..\\GridCell.h"
+
+typedef struct {
+ LPCTSTR szURLPrefix;
+ size_t nLength;
+} URLStruct;
+
+
+
+class CGridURLCell : public CGridCell
+{
+ DECLARE_DYNCREATE(CGridURLCell)
+
+public:
+ CGridURLCell();
+ virtual ~CGridURLCell();
+
+ virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+ virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+ virtual LPCTSTR GetTipText() { return NULL; }
+ void SetAutoLaunchUrl(BOOL bLaunch = TRUE) { m_bLaunchUrl = bLaunch; }
+ BOOL GetAutoLaunchUrl() { return m_bLaunchUrl; }
+
+protected:
+ virtual BOOL OnSetCursor();
+ virtual void OnClick(CPoint PointCellRelative);
+
+ BOOL HasUrl(CString str);
+ BOOL OverURL(CPoint& pt, CString& strURL);
+
+protected:
+#ifndef _WIN32_WCE
+ static HCURSOR g_hLinkCursor; // Hyperlink mouse cursor
+ HCURSOR GetHandCursor();
+#endif
+ static URLStruct g_szURIprefixes[];
+
+protected:
+ COLORREF m_clrUrl;
+ BOOL m_bLaunchUrl;
+ CRect m_Rect;
+};
+
+#endif // !defined(AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h b/SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h
new file mode 100644
index 0000000..3894a4f
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////
+// Titletip.h : header file
+//
+// MFC Grid Control - cell titletips
+//
+// 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.10+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+#define TITLETIP_CLASSNAME _T("ZTitleTip")
+
+/////////////////////////////////////////////////////////////////////////////
+// CTitleTip window
+
+class AFX_EXT_CLASS CTitleTip : public CWnd
+{
+// Construction
+public:
+ CTitleTip();
+ virtual ~CTitleTip();
+ virtual BOOL Create( CWnd *pParentWnd);
+
+// Attributes
+public:
+ void SetParentWnd(CWnd* pParentWnd) { m_pParentWnd = pParentWnd; }
+ CWnd* GetParentWnd() { return m_pParentWnd; }
+
+// Operations
+public:
+ void Show(CRect rectTitle, LPCTSTR lpszTitleText,
+ int xoffset = 0, LPRECT lpHoverRect = NULL,
+ const LOGFONT* lpLogFont = NULL,
+ COLORREF crTextClr = CLR_DEFAULT, COLORREF crBackClr = CLR_DEFAULT);
+ void Hide();
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CTitleTip)
+ public:
+ virtual BOOL PreTranslateMessage(MSG* pMsg);
+ virtual BOOL DestroyWindow();
+ //}}AFX_VIRTUAL
+
+// Implementation
+protected:
+ CWnd *m_pParentWnd;
+ CRect m_rectTitle;
+ CRect m_rectHover;
+ DWORD m_dwLastLButtonDown;
+ DWORD m_dwDblClickMsecs;
+ BOOL m_bCreated;
+
+ // Generated message map functions
+protected:
+ //{{AFX_MSG(CTitleTip)
+ afx_msg void OnMouseMove(UINT nFlags, CPoint point);
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h b/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h
index b8bc378..edc152e 100644
--- a/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h
+++ b/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h
@@ -55,18 +55,18 @@
int nId; //CONTROL ID
int nItem; //LIST ITEM
int nSubItem; //LIST SUBITEM
- CELLCOLOR oldClr; //汲沥傈狼 祸
- CELLCOLOR newClr; //汲沥饶狼 祸
- LPWSTR lpstrOld; //涝仿傈 巩磊凯
- LPWSTR lpstrNew; //涝仿茄 巩磊凯
+ CELLCOLOR oldClr; //姹叉播鍌堢嫾 绁�
+ CELLCOLOR newClr; //姹叉播楗剁嫾 绁�
+ LPWSTR lpstrOld; //娑濅豢鍌� 宸╃鍑�
+ LPWSTR lpstrNew; //娑濅豢鑼� 宸╃鍑�
};
struct CELLDATA
{
- COLORREF txtclr;//臂磊祸
- COLORREF bkgclr;//硅版祸
- bool bUseCtl;//牧飘费 荤侩
- bool bTurn; //馆娄馆娄
+ COLORREF txtclr;//鑷傜绁�
+ COLORREF bkgclr;//纭呯増绁�
+ bool bUseCtl;//鐗ч璐� 鑽や京
+ bool bTurn; //棣嗗▌棣嗗▌
DWORD dwData;
};
@@ -76,7 +76,7 @@
CCellData()
{
bTurn =false;
- bUseCtl=false;//牧飘费 荤侩
+ bUseCtl=false;//鐗ч璐� 鑽や京
txtclr=clrTEXT;
bkgclr=clrBACK;
dwData=0;
@@ -86,7 +86,7 @@
bool bTurning, DWORD dwUserData=0)
{
bTurn =bTurning;
- bUseCtl=false;//牧飘费 荤侩
+ bUseCtl=false;//鐗ч璐� 鑽や京
txtclr=TextColor;
bkgclr=BackColor;
dwData=dwUserData;
@@ -101,50 +101,50 @@
virtual void SerializeAllInfo(CArchive& ar);
protected:
- CBrush m_brush; //俊叼飘冠胶狼 硅版
- CEdit m_edit; //俊叼飘 冠胶
+ CBrush m_brush; //淇婂徏椋樺啝鑳剁嫾 纭呯増
+ CEdit m_edit; //淇婂徏椋� 鍐犺兌
BOOL m_bCanEdit;
- CFont* m_pFont; //府胶飘 迄飘
+ CFont* m_pFont; //搴滆兌椋� 杩勯
protected:
- void Printing(CDC* pDC);//府胶飘甫 橇赴飘肺 免仿茄促.
- CRect GetLogRect(CDC* pDC, int nItem, int nSubItem);//府胶飘 伎Rect阑 厚啦俊 蝶扼 函券茄促.
- void SetCrtToPrintRate(CDC* pDC);//拳搁苞 厘钎狼 厚啦阑 备茄促.
- int GetCrtWidth();//拳搁(府胶飘)狼 气蔼阑 府畔茄促.
+ void Printing(CDC* pDC);//搴滆兌椋樼敨 姗囪荡椋樿偤 鍏嶄豢鑼勪績.
+ CRect GetLogRect(CDC* pDC, int nItem, int nSubItem);//搴滆兌椋� 浼嶳ect闃� 鍘氬暒淇� 铦舵壖 鍑藉埜鑼勪績.
+ void SetCrtToPrintRate(CDC* pDC);//鎷虫悂鑻� 鍘橀拵鐙� 鍘氬暒闃� 澶囪寗淇�.
+ int GetCrtWidth();//鎷虫悂(搴滆兌椋�)鐙� 姘旇敿闃� 搴滅晹鑼勪績.
protected:
BOOL m_bSort;//Sort Flag
- BOOL m_bTime;//SetTimer(,,)甫 汲沥沁绰瘤 咯何
- BOOL m_bTurnDraw;//府胶飘 盎脚矫 伎狼 祸彬捞 函秦具窍绰瘤 咯何
- UINT m_nClipOptin;//努赋焊靛 可记
+ BOOL m_bTime;//SetTimer(,,)鐢� 姹叉播娌佺话鐦� 鍜綍
+ BOOL m_bTurnDraw;//搴滆兌椋� 鐩庤剼鐭� 浼庣嫾 绁稿浆鎹� 鍑界Е鍏风獚缁扮槫 鍜綍
+ UINT m_nClipOptin;//鍔祴鐒婇潧 鍙
CHeadCtrl m_head;//HeaderCtrl
LOCATION m_mcLct;//right mouse click
LOCATION m_edLct;//edit location
UINT m_nStartColEdit;
UINT m_nEndColEdit;
- CMenu m_menu;//府胶飘 皋春
- CMenu* m_pUmenu;//荤侩磊 沥狼 皋春
+ CMenu m_menu;//搴滆兌椋� 鐨嬫槬
+ CMenu* m_pUmenu;//鑽や京纾� 娌ョ嫾 鐨嬫槬
CELLINFO* m_pInfo;
- //汲沥等 Item Data甫 昏力茄促.
+ //姹叉播绛� Item Data鐢� 鏄忓姏鑼勪績.
void DeleteItemData(int nItem);
void DeleteAllItemData();
- //俊叼飘冠胶狼 Data甫 荐沥沁绰瘤 咯何甫 眉农窍绊
- //何葛扩档快肺 皋矫瘤甫 焊辰促.
+ //淇婂徏椋樺啝鑳剁嫾 Data鐢� 鑽愭播娌佺话鐦� 鍜綍鐢� 鐪夊啘绐嶇粖
+ //浣曡憶鎵╂。蹇偤 鐨嬬煫鐦ょ敨 鐒婅景淇�.
BOOL IsModifyEdit(int nItem, int nSubItem);
- //酒捞袍狼 康开捞 函沁阑 版快俊 俊叼飘冠胶狼 农扁档 函秦具 窍骨肺
- //促澜窃荐甫 捞侩窍咯 俊叼飘冠胶甫 盎脚茄促.
+ //閰掓崬琚嶇嫾 搴峰紑鎹� 鍑芥瞾闃� 鐗堝揩淇� 淇婂徏椋樺啝鑳剁嫾 鍐滄墎妗� 鍑界Е鍏� 绐嶉鑲�
+ //淇冩緶绐冭崘鐢� 鎹炰京绐嶅挴 淇婂徏椋樺啝鑳剁敨 鐩庤剼鑼勪績.
void UpdateEdit(int nItem, int nSubItem);
- //伎狼 康开阑 盎脚茄促.
+ //浼庣嫾 搴峰紑闃� 鐩庤剼鑼勪績.
void UpdateCell(int nItem, int nSubItem);
- //伎狼 拿矾啊 函窍档废 汲沥登绢 乐绰瘤 咯何
+ //浼庣嫾 鎷跨熅鍟� 鍑界獚妗e簾 姹叉播鐧荤虎 涔愮话鐦� 鍜綍
bool IsTurning(int nItem, int nSubItem);
- //府胶飘狼 沥纺 left,right,center 屈侥阑 备茄促.
+ //搴滆兌椋樼嫾 娌ョ汉 left,right,center 灞堜茎闃� 澶囪寗淇�.
int GetColumnFmt(int nSubItem);
public:
@@ -192,25 +192,25 @@
BOOL UseEdit( int nItem, int nSubItem);
void EditCtrl( MSG pMsg );
- //Rect捞 函沁绰瘤 魄窜茄促.
+ //Rect鎹� 鍑芥瞾缁扮槫 榄勭獪鑼勪績.
BOOL IsSubRectChange();
- //府胶飘甫 橇赴飘肺 免仿茄促.
- BOOL ListPrinting(BOOL bDialog, int Orientation=1/*啊肺=1, 技肺=2*/);
+ //搴滆兌椋樼敨 姗囪荡椋樿偤 鍏嶄豢鑼勪績.
+ BOOL ListPrinting(BOOL bDialog, int Orientation=1/*鍟婅偤=1, 鎶�鑲�=2*/);
//keystate function
- BOOL IsMultiKey();//shift虐, ctrl虐殿捞 喘矾脸绰瘤 check茄促
+ BOOL IsMultiKey();//shift铏�, ctrl铏愭鎹� 鍠樼熅鑴哥话鐦� check鑼勪績
//font function
- void SetLogFont(LOGFONT logfont);//厘钎 迄飘
- void SetListFont(LOGFONT* logfont);//府胶飘 迄飘
+ void SetLogFont(LOGFONT logfont);//鍘橀拵 杩勯
+ void SetListFont(LOGFONT* logfont);//搴滆兌椋� 杩勯
//
- int GetSubItemCount(); //拿烦荐甫 备茄促.
- int GetLeftSubItem(); //谅螟栏肺何磐 劝己拳等 拿烦阑 茫绰促.
- int GetRightSubItem(); //快螟栏肺何磐 劝己拳等 拿烦阑 茫绰促.
+ int GetSubItemCount(); //鎷跨儲鑽愮敨 澶囪寗淇�.
+ int GetLeftSubItem(); //璋呰灍鏍忚偤浣曠 鍔濆繁鎷崇瓑 鎷跨儲闃� 鑼话淇�.
+ int GetRightSubItem(); //蹇灍鏍忚偤浣曠 鍔濆繁鎷崇瓑 鎷跨儲闃� 鑼话淇�.
- //荤侩磊啊 鞘夸茄 蔼阑 历厘窍绊 阂矾棵荐 乐绰 窃荐捞促.
+ //鑽や京纾婂晩 闉樺じ鑼� 钄奸槕 鍘嗗帢绐嶇粖 闃傜熅妫佃崘 涔愮话 绐冭崘鎹炰績.
BOOL SetCellData(int nItem, int nSubItem, DWORD dwData);
DWORD GetCellData(int nItem, int nSubItem);
diff --git a/SourceCode/Bond/BondEq/BondEq.vcxproj b/SourceCode/Bond/BondEq/BondEq.vcxproj
index df383a5..8dc6fb4 100644
--- a/SourceCode/Bond/BondEq/BondEq.vcxproj
+++ b/SourceCode/Bond/BondEq/BondEq.vcxproj
@@ -115,7 +115,7 @@
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
- <AdditionalIncludeDirectories>.;.\View;.\DBManager;..\DatabaseSDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;.\View;.\DBManager;..\DatabaseSDK\include;..\BLControlsSDK\include;..\BLControlsSDK\GridControl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -168,6 +168,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>.;.\View;.\DBManager;..\DatabaseSDK\include;..\BLControlsSDK\include;..\BLControlsSDK\GridControl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -245,6 +246,7 @@
<ClInclude Include="targetver.h" />
<ClInclude Include="ToolUnits.h" />
<ClInclude Include="TopToolbar.h" />
+ <ClInclude Include="UserManagerDlg.h" />
<ClInclude Include="VerticalLine.h" />
<ClInclude Include="View\ChangePasswordDlg.h" />
<ClInclude Include="View\LoginDlg.h" />
@@ -308,6 +310,7 @@
</ClCompile>
<ClCompile Include="ToolUnits.cpp" />
<ClCompile Include="TopToolbar.cpp" />
+ <ClCompile Include="UserManagerDlg.cpp" />
<ClCompile Include="VerticalLine.cpp" />
<ClCompile Include="View\ChangePasswordDlg.cpp" />
<ClCompile Include="View\LoginDlg.cpp" />
diff --git a/SourceCode/Bond/BondEq/BondEqDlg.cpp b/SourceCode/Bond/BondEq/BondEqDlg.cpp
index 70fa037..0df941d 100644
--- a/SourceCode/Bond/BondEq/BondEqDlg.cpp
+++ b/SourceCode/Bond/BondEq/BondEqDlg.cpp
@@ -14,6 +14,7 @@
// test
#include "AxisSettingsDlg.h"
+#include "UserManagerDlg.h"
#ifdef _DEBUG
@@ -452,8 +453,14 @@
void CBondEqDlg::OnMenuFileSettings()
{
+ CAxisSettingsDlg axisDlg;
+ axisDlg.SetPLC(theApp.m_model.getBonder().getPLC("PLC(1)"));
+ axisDlg.DoModal();
+
+ /*
CSettingsDlg dlg;
dlg.DoModal();
+ */
}
void CBondEqDlg::OnUpdateMenuFileSettings(CCmdUI* pCmdUI)
@@ -537,14 +544,9 @@
ShowLoginDlg();
}
else if (2 == menuId) {
- if (userManager.isLoggedIn()) {
- userManager.logout();
- m_pTopToolbar->SetOperatorBtnText(_T("未登录"));
- }
-
- CAxisSettingsDlg axisDlg;
- axisDlg.SetPLC(theApp.m_model.getBonder().getPLC("PLC(1)"));
- axisDlg.DoModal();
+ // test
+ CUserManagerDlg dlg;
+ dlg.DoModal();
}
}
diff --git a/SourceCode/Bond/BondEq/CProjectPageComponents.cpp b/SourceCode/Bond/BondEq/CProjectPageComponents.cpp
index 9c4032c..3afe5e9 100644
--- a/SourceCode/Bond/BondEq/CProjectPageComponents.cpp
+++ b/SourceCode/Bond/BondEq/CProjectPageComponents.cpp
@@ -13,7 +13,7 @@
IMPLEMENT_DYNAMIC(CProjectPageComponents, CDialogEx)
CProjectPageComponents::CProjectPageComponents(CWnd* pParent /*=nullptr*/)
- : CDialogEx(IDD_PROJECT_PAGE_COMPENTS, pParent)
+ : CDialogEx(IDD_PROJECT_PAGE_COMPONENTS, pParent)
{
m_crBkgnd = PROPAGE_BACKGROUND_COLOR;
m_hbrBkgnd = nullptr;
diff --git a/SourceCode/Bond/BondEq/DBManager/UserManager.cpp b/SourceCode/Bond/BondEq/DBManager/UserManager.cpp
index c58f219..7184b03 100644
--- a/SourceCode/Bond/BondEq/DBManager/UserManager.cpp
+++ b/SourceCode/Bond/BondEq/DBManager/UserManager.cpp
@@ -39,7 +39,7 @@
std::string createTableQuery = R"(
CREATE TABLE IF NOT EXISTS users (
username VARCHAR(50) PRIMARY KEY,
- password_hash VARCHAR(255) NOT NULL,
+ password VARCHAR(255) NOT NULL,
role INT NOT NULL,
session_timeout INT DEFAULT 30,
session_expiration INT DEFAULT 72,
@@ -52,8 +52,8 @@
auto result = m_pDB->fetchResults(checkAdminQuery);
if (result.empty() || result[0][0] == "0") {
- std::string insertAdminQuery = "INSERT INTO users (username, password_hash, role, session_timeout, session_expiration) VALUES ('" +
- INITIAL_ADMIN_USERNAME + "', '" + hashPassword(INITIAL_ADMIN_PASSWORD) + "', 0, 30, 72)";
+ std::string insertAdminQuery = "INSERT INTO users (username, password, role, session_timeout, session_expiration) VALUES ('" +
+ INITIAL_ADMIN_USERNAME + "', '" + simpleEncryptDecrypt(INITIAL_ADMIN_PASSWORD, "BandKey") + "', 0, 30, 72)";
m_pDB->executeQuery(insertAdminQuery);
}
@@ -178,10 +178,10 @@
// 登录方法
bool UserManager::login(const std::string& username, const std::string& password, bool rememberMeFlag) {
- std::string query = "SELECT username, password_hash, role, session_timeout, session_expiration FROM users WHERE username = '" + username + "'";
+ std::string query = "SELECT username, password, role, session_timeout, session_expiration FROM users WHERE username = '" + username + "'";
auto result = m_pDB->fetchResults(query);
- if (result.empty() || result[0][1] != hashPassword(password)) {
+ if (result.empty() || result[0][1] != simpleEncryptDecrypt(password, "BandKey")) {
std::cerr << "Login failed: Invalid username or password." << std::endl;
return false;
}
@@ -233,8 +233,8 @@
return false;
}
- std::string query = "INSERT INTO users (username, password_hash, role, session_timeout, session_expiration) VALUES ('" +
- username + "', '" + hashPassword(password) + "', " + std::to_string(static_cast<int>(role)) + ", " +
+ std::string query = "INSERT INTO users (username, password, role, session_timeout, session_expiration) VALUES ('" +
+ username + "', '" + simpleEncryptDecrypt(password, "BandKey") + "', " + std::to_string(static_cast<int>(role)) + ", " +
std::to_string(timeout.count()) + ", " + std::to_string(expiration.count()) + ")";
return m_pDB->executeQuery(query);
}
@@ -262,8 +262,13 @@
}
// 查询整个用户表
- std::string query = "SELECT username, password_hash, role, session_timeout, session_expiration, last_login FROM users";
- return m_pDB->fetchResults(query);
+ std::string query = "SELECT username, password, role, session_timeout, session_expiration, last_login FROM users";
+ std::vector<std::vector<std::string>> results = m_pDB->fetchResults(query);
+ for (auto& row : results) {
+ row[1] = simpleEncryptDecrypt(row[1], "BandKey");
+ }
+
+ return results;
}
// 设置整个用户表的数据,仅超级管理员有权限
@@ -287,8 +292,8 @@
return false;
}
- std::string insertQuery = "INSERT INTO users (username, password_hash, role, session_timeout, session_expiration, last_login) VALUES ('" +
- user[0] + "', '" + user[1] + "', " + user[2] + ", " + user[3] + ", " + user[4] + ", '" + user[5] + "')";
+ std::string insertQuery = "INSERT INTO users (username, password, role, session_timeout, session_expiration, last_login) VALUES ('" +
+ user[0] + "', '" + simpleEncryptDecrypt(user[1], "BandKey") + "', " + user[2] + ", " + user[3] + ", " + user[4] + ", '" + user[5] + "')";
if (!m_pDB->executeQuery(insertQuery)) {
std::cerr << "Failed to insert user: " << user[0] << std::endl;
@@ -328,7 +333,7 @@
return false;
}
- std::string query = "UPDATE users SET password_hash = '" + hashPassword(newPassword) +
+ std::string query = "UPDATE users SET password = '" + simpleEncryptDecrypt(newPassword, "BandKey") +
"' WHERE username = '" + username + "'";
bool success = m_pDB->executeQuery(query);
diff --git a/SourceCode/Bond/BondEq/Resource.h b/SourceCode/Bond/BondEq/Resource.h
index 06da07b..d780f3c 100644
--- a/SourceCode/Bond/BondEq/Resource.h
+++ b/SourceCode/Bond/BondEq/Resource.h
Binary files differ
diff --git a/SourceCode/Bond/BondEq/UserManagerDlg.cpp b/SourceCode/Bond/BondEq/UserManagerDlg.cpp
new file mode 100644
index 0000000..c01bc32
--- /dev/null
+++ b/SourceCode/Bond/BondEq/UserManagerDlg.cpp
@@ -0,0 +1,498 @@
+锘�// UserManagerDlg.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "BondEq.h"
+#include "afxdialogex.h"
+#include "UserManagerDlg.h"
+#include "UserManager.h"
+#include "NewCellTypes/GridCellCombo.h"
+#include "NewCellTypes/GridCellNumeric.h"
+
+
+// CUserManagerDlg 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CUserManagerDlg, CDialogEx)
+
+CUserManagerDlg::CUserManagerDlg(CWnd* pParent /*=nullptr*/)
+ : CDialogEx(IDD_DIALOG_USER_MANAGER, pParent)
+{
+
+}
+
+CUserManagerDlg::~CUserManagerDlg()
+{
+}
+
+void CUserManagerDlg::DoDataExchange(CDataExchange* pDX)
+{
+ DDX_Control(pDX, IDC_CUSTOM_USER, m_gridUserManager);
+ CDialogEx::DoDataExchange(pDX);
+}
+
+void CUserManagerDlg::InitUserManager()
+{
+ if (m_gridUserManager.GetSafeHwnd() == NULL)
+ return;
+
+ int nRows = 1;
+ int nCols = 7;
+
+ int nFixRows = 1;
+ int nFixCols = 0;
+ int nRowIdx = 0;
+ int nColIdx = 0;
+
+ m_gridUserManager.DeleteAllItems();
+ m_gridUserManager.SetVirtualMode(FALSE);
+ m_gridUserManager.GetDefaultCell(TRUE, FALSE)->SetBackClr(g_nGridFixCellColor);
+ m_gridUserManager.GetDefaultCell(FALSE, TRUE)->SetBackClr(g_nGridFixCellColor);
+ m_gridUserManager.GetDefaultCell(FALSE, FALSE)->SetBackClr(g_nGridCellColor);
+ m_gridUserManager.SetFixedTextColor(g_nGridFixFontColor);
+
+ m_gridUserManager.SetRowCount(nRows);
+ m_gridUserManager.SetColumnCount(nCols);
+ m_gridUserManager.SetFixedRowCount(nFixRows);
+ m_gridUserManager.SetFixedColumnCount(nFixCols);
+
+ // Col
+ m_gridUserManager.SetColumnWidth(nColIdx, 90);
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("No."));
+ m_gridUserManager.SetColumnWidth(nColIdx, 100);
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("鐢ㄦ埛鍚�"));
+ m_gridUserManager.SetColumnWidth(nColIdx, 70);
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("瀵嗙爜"));
+ m_gridUserManager.SetColumnWidth(nColIdx, 70);
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("鏉冮檺"));
+ m_gridUserManager.SetColumnWidth(nColIdx, 70);
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("浼氳瘽瓒呮椂锛堝垎閽燂級"));
+ m_gridUserManager.SetColumnWidth(nColIdx, 70);
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("浼氳瘽杩囨湡锛堝皬鏃讹級"));
+ m_gridUserManager.SetColumnWidth(nColIdx, 70);
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("鏈�鍚庝竴娆$櫥褰曟椂闂�"));
+
+ m_gridUserManager.SetFixedRowSelection(FALSE);
+ m_gridUserManager.SetFixedColumnSelection(FALSE);
+ m_gridUserManager.EnableSelection(TRUE);
+ m_gridUserManager.SetEditable(TRUE);
+ m_gridUserManager.SetRowResize(FALSE);
+ m_gridUserManager.SetColumnResize(FALSE);
+ m_gridUserManager.ExpandColumnsToFit(TRUE);
+
+ FillUserManager();
+}
+
+void CUserManagerDlg::FillUserManager()
+{
+ UserManager& userManager = UserManager::getInstance();
+ if (!userManager.isLoggedIn()) {
+ AfxMessageBox(_T("鏈櫥褰�"));
+ return;
+ }
+
+ if (userManager.getCurrentUserRole() != UserRole::SuperAdmin) {
+ AfxMessageBox(_T("闈炵鐞嗗憳鐢ㄦ埛"));
+ return;
+ }
+
+ std::vector<std::vector<std::string>> usersData = userManager.getUsers();
+ if (!usersData.empty()) {
+ m_gridUserManager.SetRowCount(usersData.size() + 1);
+
+ for (size_t i = 0; i < usersData.size(); i++) {
+ int nRowIdx = i + 1;
+ int nColIdx = 0;
+
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, std::to_string(i + 1).c_str());
+ for (size_t j = 0; j < usersData[i].size(); j++) {
+ if (usersData[i][1].empty()) {
+ continue;
+ }
+ m_gridUserManager.SetItemText(nRowIdx, nColIdx++, usersData[i][j].c_str());
+ }
+ }
+
+ m_gridUserManager.Invalidate();
+ m_gridUserManager.UpdateWindow();
+ }
+
+ CStringArray permissions;
+ permissions.Add(_T("绠$悊鍛�"));
+ permissions.Add(_T("宸ョ▼甯�"));
+ permissions.Add(_T("鎿嶄綔鍛�"));
+
+ int nCols = m_gridUserManager.GetColumnCount();
+ for (int i = 1; i < m_gridUserManager.GetRowCount(); ++i) {
+ m_gridUserManager.SetItemState(i, 0, GVIS_READONLY); // 绗竴鍒楀彧璇�
+ m_gridUserManager.SetItemState(i, nCols - 1, GVIS_READONLY); // 鏈�鍚庝竴鍒楀彧璇�
+
+ // 绗洓鍒楄缃潈闄愬垪涓轰笅鎷夋
+ if (m_gridUserManager.SetCellType(i, 3, RUNTIME_CLASS(CGridCellCombo))) {
+ CGridCellCombo* pCell = static_cast<CGridCellCombo*>(m_gridUserManager.GetCell(i, 3));
+ pCell->SetOptions(permissions);
+ pCell->SetStyle(CBS_DROPDOWNLIST);
+
+ CString cstrRole = m_gridUserManager.GetItemText(i, 3);
+ int nRole = _ttoi(cstrRole);
+ if (nRole < 0 || nRole > 2) {
+ CString cstrMessage;
+ cstrMessage.Format(_T("鐢ㄦ埛 [%s]锛屾潈闄愬紓甯革紒灏嗚缃垚鎿嶄綔鍛橈紒"), m_gridUserManager.GetItemText(i, 1));
+ AfxMessageBox(cstrMessage);
+ nRole = 2;
+ }
+
+ m_gridUserManager.SetItemText(i, 3, permissions.GetAt(nRole));
+ }
+
+ // 绗簲銆佸叚鍒楋紙浼氳瘽瓒呮椂锛夎缃负Numeric
+ m_gridUserManager.SetCellType(i, 4, RUNTIME_CLASS(CGridCellNumeric));
+ m_gridUserManager.SetCellType(i, 5, RUNTIME_CLASS(CGridCellNumeric));
+ }
+}
+
+void CUserManagerDlg::AddRow(CGridCtrl* pGridCtrl)
+{
+ if (!pGridCtrl) return;
+
+ if (pGridCtrl->GetRowCount() <= 0 || pGridCtrl->GetColumnCount() <= 0) {
+ AfxMessageBox(_T("缃戞牸鎺т欢鏈纭垵濮嬪寲锛岃妫�鏌ュ垵濮嬪寲閫昏緫锛�"));
+ return;
+ }
+
+ int nRowCount = pGridCtrl->GetRowCount();
+ pGridCtrl->SetRowCount(nRowCount + 1);
+ int newRowIndex = nRowCount;
+
+ CString strText;
+ strText.Format(_T("%d"), newRowIndex);
+ pGridCtrl->SetItemText(newRowIndex, 0, strText);
+ strText.Format(_T("User%d"), newRowIndex);
+ pGridCtrl->SetItemText(newRowIndex, 1, strText);
+ pGridCtrl->SetItemText(newRowIndex, 2, _T("123456"));
+ pGridCtrl->SetItemText(newRowIndex, 3, _T("鎿嶄綔鍛�"));
+ pGridCtrl->SetItemText(newRowIndex, 4, _T("30"));
+ pGridCtrl->SetItemText(newRowIndex, 5, _T("72"));
+ pGridCtrl->SetItemText(newRowIndex, 6, _T("2024-01-01 00:00:00"));
+
+ int nCols = m_gridUserManager.GetColumnCount();
+ m_gridUserManager.SetItemState(newRowIndex, 0, GVIS_READONLY); // 绗竴鍒�
+ m_gridUserManager.SetItemState(newRowIndex, nCols - 1, GVIS_READONLY); // 鏈�鍚庝竴鍒�
+
+ // 绗洓鍒楄缃紙鏉冮檺鍒楋級涓轰笅鎷夋
+ CStringArray permissions;
+ permissions.Add(_T("绠$悊鍛�"));
+ permissions.Add(_T("宸ョ▼甯�"));
+ permissions.Add(_T("鎿嶄綔鍛�"));
+
+ if (m_gridUserManager.SetCellType(newRowIndex, 3, RUNTIME_CLASS(CGridCellCombo))) {
+ CGridCellCombo* pCell = static_cast<CGridCellCombo*>(m_gridUserManager.GetCell(newRowIndex, 3));
+ pCell->SetOptions(permissions);
+ pCell->SetStyle(CBS_DROPDOWNLIST);
+
+ m_gridUserManager.SetItemText(newRowIndex, 3, permissions.GetAt(2));
+ }
+
+ // 绗簲銆佸叚鍒楋紙浼氳瘽瓒呮椂锛夎缃负Numeric
+ m_gridUserManager.SetCellType(newRowIndex, 4, RUNTIME_CLASS(CGridCellNumeric));
+ m_gridUserManager.SetCellType(newRowIndex, 5, RUNTIME_CLASS(CGridCellNumeric));
+
+ pGridCtrl->Invalidate();
+ pGridCtrl->UpdateWindow();
+}
+
+void CUserManagerDlg::DeleteSelectedRow(CGridCtrl* pGridCtrl)
+{
+ if (!pGridCtrl) return;
+ CCellRange selectedRange = pGridCtrl->GetSelectedCellRange();
+ if (selectedRange.IsValid()) {
+ CString currentUser = UserManager::getInstance().getCurrentUser().c_str();
+ std::vector<int> rowsToDelete;
+
+ for (int row = selectedRange.GetMinRow(); row <= selectedRange.GetMaxRow(); ++row) {
+ BOOL isRowSelected = FALSE;
+ for (int col = selectedRange.GetMinCol(); col <= selectedRange.GetMaxCol(); ++col) {
+ if (pGridCtrl->IsCellSelected(row, col)) {
+ isRowSelected = TRUE;
+ break;
+ }
+ }
+
+ if (!isRowSelected) {
+ continue;
+ }
+
+ CString selectedUser = pGridCtrl->GetItemText(row, 1);
+ if (selectedUser == currentUser) {
+ CString message;
+ message.Format(_T("鐢ㄦ埛 [%s] 鏄綋鍓嶇櫥褰曠敤鎴凤紝涓嶈兘鍒犻櫎锛�"), currentUser);
+ AfxMessageBox(message, MB_OK | MB_ICONEXCLAMATION);
+ return;
+ }
+
+ rowsToDelete.push_back(row);
+ }
+
+ if (rowsToDelete.empty()) {
+ AfxMessageBox(_T("璇峰厛閫夋嫨瑕佸垹闄ょ殑琛岋紒"), MB_OK | MB_ICONINFORMATION);
+ return;
+ }
+
+ CString message;
+ if (rowsToDelete.size() == 1) {
+ CString selectedUser = pGridCtrl->GetItemText(rowsToDelete[0], 1);
+ message.Format(_T("纭畾瑕佸垹闄ら�変腑鐢ㄦ埛 [%s] 鍚楋紵"), selectedUser);
+ }
+ else {
+ message.Format(_T("纭畾瑕佸垹闄ら�変腑鐨� %d 涓敤鎴峰悧锛�"), rowsToDelete.size());
+ }
+
+ if (AfxMessageBox(message, MB_YESNO | MB_ICONQUESTION) == IDYES) {
+ for (auto it = rowsToDelete.rbegin(); it != rowsToDelete.rend(); ++it) {
+ pGridCtrl->DeleteRow(*it);
+ }
+
+ pGridCtrl->Invalidate();
+ pGridCtrl->UpdateWindow();
+ }
+ }
+ else {
+ AfxMessageBox(_T("璇峰厛閫夋嫨瑕佸垹闄ょ殑鐢ㄦ埛锛�"), MB_OK | MB_ICONINFORMATION);
+ }
+}
+
+bool CUserManagerDlg::IsUsernameDuplicate(const CString& username)
+{
+ for (int row = 1; row < m_gridUserManager.GetRowCount(); ++row) {
+ if (m_gridUserManager.GetItemText(row, 1) == username) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void CUserManagerDlg::AdjustControls(int nWidth, int nHeight)
+{
+ CWnd* pWnd = GetWindow(GW_CHILD);
+ while (pWnd) {
+ UINT nCtrlID = pWnd->GetDlgCtrlID();
+
+ CRect ctrlRect;
+ pWnd->GetWindowRect(&ctrlRect);
+ ScreenToClient(&ctrlRect);
+
+ // 璁$畻鎺т欢鐨勬柊浣嶇疆鍜屽ぇ灏忥紝鎸夋瘮渚嬭皟鏁�
+ int newX = (int)(ctrlRect.left * (nWidth / (float)m_nInitialWidth));
+ int newY = (int)(ctrlRect.top * (nHeight / (float)m_nInitialHeight));
+ int newWidth = (int)(ctrlRect.Width() * (nWidth / (float)m_nInitialWidth));
+ int newHeight = (int)(ctrlRect.Height() * (nHeight / (float)m_nInitialHeight));
+
+ TCHAR szClassName[256];
+ GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
+
+
+ if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
+ CGridCtrl* pGridCtrl = (CGridCtrl*)pWnd;
+ pGridCtrl->SetDefCellHeight(newHeight / 20);
+ pGridCtrl->ExpandColumnsToFit(TRUE);
+ pGridCtrl->Invalidate();
+ }
+
+ pWnd->MoveWindow(newX, newY, newWidth, newHeight);
+ AdjustControlFont(pWnd, newWidth, newHeight);
+
+ // 鑾峰彇涓嬩竴涓帶浠�
+ pWnd = pWnd->GetNextWindow();
+ }
+}
+
+void CUserManagerDlg::AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight)
+{
+ TCHAR szClassName[256];
+ GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
+
+ if (_tcsicmp(szClassName, _T("Static")) == 0) {
+ CStatic* pStatic = (CStatic*)pWnd;
+ pStatic->ModifyStyle(0, SS_CENTER | SS_CENTERIMAGE);
+ return;
+ }
+
+ if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
+ return;
+ }
+
+ int fontSize = nHeight - 10;
+ CFont* pCurrentFont = pWnd->GetFont();
+ LOGFONT logFont;
+ pCurrentFont->GetLogFont(&logFont);
+ logFont.lfHeight = -fontSize;
+
+ CFont newFont;
+ newFont.CreateFontIndirect(&logFont);
+
+ pWnd->SetFont(&newFont);
+ pWnd->Invalidate();
+}
+
+BEGIN_MESSAGE_MAP(CUserManagerDlg, CDialogEx)
+ ON_WM_SIZE()
+ ON_BN_CLICKED(IDC_BUTTON_ADD, &CUserManagerDlg::OnBnClickedButtonAdd)
+ ON_BN_CLICKED(IDC_BUTTON_DEL, &CUserManagerDlg::OnBnClickedButtonDel)
+ ON_BN_CLICKED(IDOK, &CUserManagerDlg::OnBnClickedOk)
+ ON_BN_CLICKED(IDC_BUTTON_INSERT, &CUserManagerDlg::OnBnClickedButtonInsert)
+END_MESSAGE_MAP()
+
+
+// CUserManagerDlg 娑堟伅澶勭悊绋嬪簭
+
+
+BOOL CUserManagerDlg::OnInitDialog()
+{
+ CDialogEx::OnInitDialog();
+
+ // TODO: 鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+ CRect screenRect, dlgRect, clientRect;
+ SetWindowText(_T("鐢ㄦ埛绠$悊"));
+ SystemParametersInfo(SPI_GETWORKAREA, 0, &screenRect, 0);
+
+ GetClientRect(&clientRect);
+ m_nInitialWidth = clientRect.Width();
+ m_nInitialHeight = clientRect.Height();
+
+ GetWindowRect(&dlgRect);
+ int dlgWidth = dlgRect.Width() * 3;
+ int dlgHeight = dlgRect.Height() * 3;
+
+ if (dlgWidth > screenRect.Width()) {
+ dlgWidth = screenRect.Width();
+ }
+ if (dlgHeight > screenRect.Height()) {
+ dlgHeight = screenRect.Height();
+ }
+
+ int centerX = screenRect.left + (screenRect.Width() - dlgWidth) / 2;
+ int centerY = screenRect.top + (screenRect.Height() - dlgHeight) / 2;
+ MoveWindow(centerX, centerY, dlgWidth, dlgHeight);
+
+ // 鍒濆鍖栫敤鎴风鐞嗚〃鏍�
+ InitUserManager();
+
+ return TRUE; // return TRUE unless you set the focus to a control
+ // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+void CUserManagerDlg::OnSize(UINT nType, int cx, int cy)
+{
+ CDialogEx::OnSize(nType, cx, cy);
+
+ // TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+ CRect rect;
+ GetClientRect(&rect);
+
+ // 閬嶅巻瀵硅瘽妗嗕腑鐨勬墍鏈夋帶浠�
+ AdjustControls(rect.Width(), rect.Height());
+}
+
+void CUserManagerDlg::OnBnClickedButtonAdd()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ AddRow(&m_gridUserManager);
+}
+
+void CUserManagerDlg::OnBnClickedButtonInsert()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ if (!m_gridUserManager.GetSafeHwnd()) return;
+
+ CCellRange selectedRange = m_gridUserManager.GetSelectedCellRange();
+ if (!selectedRange.IsValid()) {
+ AfxMessageBox(_T("璇峰厛閫夋嫨瑕佹彃鍏ョ殑浣嶇疆锛�"), MB_OK | MB_ICONINFORMATION);
+ return;
+ }
+
+ int minRow = selectedRange.GetMinRow();
+ int maxRow = selectedRange.GetMaxRow();
+ if (minRow < 1) {
+ AfxMessageBox(_T("璇烽�夋嫨鏈夋晥鐨勮锛�"), MB_OK | MB_ICONEXCLAMATION);
+ return;
+ }
+
+ for (int row = maxRow; row >= minRow; --row) {
+ std::vector<CString> rowData;
+ for (int col = 0; col < m_gridUserManager.GetColumnCount(); ++col) {
+ rowData.push_back(m_gridUserManager.GetItemText(row, col));
+ }
+
+ m_gridUserManager.InsertRow(_T("鏂扮敤鎴�"), row);
+ CString newUsername = rowData[1];
+ int suffix = 1;
+ while (IsUsernameDuplicate(newUsername)) {
+ newUsername.Format(_T("%s_%d"), rowData[1], suffix++);
+ }
+ rowData[1] = newUsername;
+
+ for (int col = 0; col < m_gridUserManager.GetColumnCount(); ++col) {
+ m_gridUserManager.SetItemText(row, col, rowData[col]);
+ }
+
+ CStringArray permissions;
+ permissions.Add(_T("绠$悊鍛�"));
+ permissions.Add(_T("宸ョ▼甯�"));
+ permissions.Add(_T("鎿嶄綔鍛�"));
+
+ if (m_gridUserManager.SetCellType(row, 3, RUNTIME_CLASS(CGridCellCombo))) {
+ CGridCellCombo* pCell = static_cast<CGridCellCombo*>(m_gridUserManager.GetCell(row, 3));
+ pCell->SetOptions(permissions);
+ pCell->SetStyle(CBS_DROPDOWNLIST);
+
+ m_gridUserManager.SetItemText(row, 3, rowData[3]);
+ }
+
+ m_gridUserManager.SetCellType(row, 4, RUNTIME_CLASS(CGridCellNumeric));
+ m_gridUserManager.SetCellType(row, 5, RUNTIME_CLASS(CGridCellNumeric));
+ }
+
+ for (int row = 1; row < m_gridUserManager.GetRowCount(); ++row) {
+ CString strIndex;
+ strIndex.Format(_T("%d"), row);
+ m_gridUserManager.SetItemText(row, 0, strIndex);
+ }
+
+ m_gridUserManager.Invalidate();
+ m_gridUserManager.UpdateWindow();
+}
+
+void CUserManagerDlg::OnBnClickedButtonDel()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ DeleteSelectedRow(&m_gridUserManager);
+}
+
+void CUserManagerDlg::OnBnClickedOk()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ std::vector<std::vector<std::string>> vecData;
+ for (int i = 1; i < m_gridUserManager.GetRowCount(); ++i) {
+ std::vector<std::string> rowData;
+ for (int j = 1; j < m_gridUserManager.GetColumnCount(); ++j) {
+ CString cellText = m_gridUserManager.GetItemText(i, j);
+ std::string cellString = CT2A(cellText.GetString());
+ if (j == 3) {
+ if (cellText == _T("绠$悊鍛�"))
+ cellString = "0";
+ else if (cellText == _T("宸ョ▼甯�"))
+ cellString = "1";
+ else if (cellText == _T("鎿嶄綔鍛�"))
+ cellString = "2";
+ else
+ cellString = "2";
+ }
+
+ rowData.push_back(cellString);
+ }
+
+ vecData.push_back(rowData);
+ }
+
+ UserManager::getInstance().setUsers(vecData);
+ CDialogEx::OnOK();
+}
diff --git a/SourceCode/Bond/BondEq/UserManagerDlg.h b/SourceCode/Bond/BondEq/UserManagerDlg.h
new file mode 100644
index 0000000..34fad57
--- /dev/null
+++ b/SourceCode/Bond/BondEq/UserManagerDlg.h
@@ -0,0 +1,47 @@
+锘�#pragma once
+#include "afxdialogex.h"
+#include "GridCtrl.h"
+
+// CUserManagerDlg 瀵硅瘽妗�
+
+class CUserManagerDlg : public CDialogEx
+{
+ DECLARE_DYNAMIC(CUserManagerDlg)
+
+public:
+ CUserManagerDlg(CWnd* pParent = nullptr); // 鏍囧噯鏋勯�犲嚱鏁�
+ virtual ~CUserManagerDlg();
+
+// 瀵硅瘽妗嗘暟鎹�
+#ifdef AFX_DESIGN_TIME
+ enum { IDD = IDD_DIALOG_USER_MANAGER };
+#endif
+
+private:
+ void InitUserManager();
+ void FillUserManager();
+ void AddRow(CGridCtrl* pGridCtrl);
+ void DeleteSelectedRow(CGridCtrl* pGridCtrl);
+ bool IsUsernameDuplicate(const CString& username);
+ void AdjustControls(int nWidth, int nHeight);
+ void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight);
+
+private:
+ int m_nInitialWidth;
+ int m_nInitialHeight;
+
+private:
+ CGridCtrl m_gridUserManager;
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 鏀寔
+
+ DECLARE_MESSAGE_MAP()
+public:
+ virtual BOOL OnInitDialog();
+ afx_msg void OnSize(UINT nType, int cx, int cy);
+ afx_msg void OnBnClickedButtonAdd();
+ afx_msg void OnBnClickedButtonInsert();
+ afx_msg void OnBnClickedButtonDel();
+ afx_msg void OnBnClickedOk();
+};
diff --git a/SourceCode/Bond/BondEq/stdafx.h b/SourceCode/Bond/BondEq/stdafx.h
index 285fe37..cf4ecaf 100644
--- a/SourceCode/Bond/BondEq/stdafx.h
+++ b/SourceCode/Bond/BondEq/stdafx.h
@@ -47,8 +47,24 @@
#include "..\DatabaseSDK\include\MySQLDatabase.h"
#include "..\DatabaseSDK\include\SQLiteDatabase.h"
-// 控件模块
-#include "..\BLControlsSDK\include\BLControls.h"
+// 控件样式
+static UINT g_nGridFixCellColor = RGB(144, 200, 246);
+static UINT g_nGridFixFontColor = RGB(0, 0, 0);
+static UINT g_nGridCellColor = RGB(255, 255, 255);
+static UINT g_nGridCellColor_NonSelect = RGB(150, 150, 150);
+static UINT g_nGridCellReadyColor = RGB(255, 255, 0);
+static UINT g_nGridCellOnColor = RGB(255, 69, 0);
+static UINT g_nGridCellOffColor = RGB(128, 191, 255);
+static UINT g_nPropertyGridFixCellColor = RGB(150, 150, 150);
+static UINT g_nPropertyGridFixFontColor = RGB(0, 0, 0);
+static UINT g_nSequenceOffColor = RGB(0, 0, 0);
+static UINT g_nSequenceOnColor = RGB(0, 180, 0);
+static UINT g_nSequenceErrorColor = RGB(255, 0, 0);
+static UINT g_nSequenceWarningColor = RGB(255, 255, 0);
+static UINT g_nSequenceReadyColor = RGB(0, 0, 255);
+static UINT g_nSequenceRunningColor = RGB(0, 255, 255);
+static UINT g_nSequencePauseColor = RGB(255, 0, 255);
+static UINT g_nSequenceStopColor = RGB(128, 128, 128);
#if defined(_WIN64)
#if defined(_DEBUG)
diff --git a/SourceCode/Bond/x64/Debug/Config/BondEq.db b/SourceCode/Bond/x64/Debug/Config/BondEq.db
index 3781a31..40ce044 100644
--- a/SourceCode/Bond/x64/Debug/Config/BondEq.db
+++ b/SourceCode/Bond/x64/Debug/Config/BondEq.db
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Config/BondServo.db b/SourceCode/Bond/x64/Debug/Config/BondServo.db
deleted file mode 100644
index fc40e23..0000000
--- a/SourceCode/Bond/x64/Debug/Config/BondServo.db
+++ /dev/null
Binary files differ
--
Gitblit v1.9.3