From 863f21995955fb3e9aa471430218967d4e642c27 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 29 五月 2025 16:11:24 +0800
Subject: [PATCH] Merge branch 'liuyang'
---
SourceCode/Bond/Servo/GridControl/GridCell.cpp | 294 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 294 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/GridControl/GridCell.cpp b/SourceCode/Bond/Servo/GridControl/GridCell.cpp
new file mode 100644
index 0000000..370413c
--- /dev/null
+++ b/SourceCode/Bond/Servo/GridControl/GridCell.cpp
@@ -0,0 +1,294 @@
+// GridCell.cpp : implementation file
+//
+// MFC Grid Control - Main grid cell class
+//
+// Provides the implementation for the "default" cell type of the
+// grid control. Adds in cell editing.
+//
+// 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+
+//
+// History:
+// Eric Woodruff - 20 Feb 2000 - Added PrintCell() plus other minor changes
+// Ken Bertelson - 12 Apr 2000 - Split CGridCell into CGridCell and CGridCellBase
+// <kenbertelson@hotmail.com>
+// C Maunder - 17 Jun 2000 - Font handling optimsed, Added CGridDefaultCell
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "GridCell.h"
+#include "GridCtrl.h"
+#include "GridInPlaceEdit.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static const char* THIS_FILE = __FILE__;
+#endif
+
+IMPLEMENT_DYNCREATE(CGridCell, CGridCellBase)
+IMPLEMENT_DYNCREATE(CGridDefaultCell, CGridCell)
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCell
+
+CGridCell::CGridCell()
+{
+ m_plfFont = NULL;
+ CGridCell::Reset();
+}
+
+CGridCell::~CGridCell()
+{
+ if (m_plfFont)
+ {
+ delete m_plfFont;
+ m_plfFont = NULL;
+ }
+
+
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCell Attributes
+
+void CGridCell::operator=(const CGridCell& cell)
+{
+ if (this != &cell) CGridCellBase::operator=(cell);
+}
+
+void CGridCell::Reset()
+{
+ CGridCellBase::Reset();
+
+ m_strText.Empty();
+ m_nImage = -1;
+ m_lParam = NULL; // BUG FIX J. Bloggs 20/10/03
+ m_pGrid = NULL;
+ m_bEditing = FALSE;
+ m_pEditWnd = NULL;
+
+ m_nFormat = (DWORD)-1; // Use default from CGridDefaultCell
+ m_crBkClr = CLR_DEFAULT; // Background colour (or CLR_DEFAULT)
+ m_crFgClr = CLR_DEFAULT; // Forground colour (or CLR_DEFAULT)
+ m_nMargin = (UINT)-1; // Use default from CGridDefaultCell
+
+ if (m_plfFont)
+ {
+ delete m_plfFont;
+ m_plfFont = NULL;
+ }
+ m_plfFont = NULL; // Cell font
+}
+
+void CGridCell::SetFont(const LOGFONT* plf)
+{
+ if (plf == NULL)
+ {
+ if (m_plfFont)
+ {
+ delete m_plfFont;
+ m_plfFont = NULL;
+ }
+ }
+ else
+ {
+ if (!m_plfFont)
+ m_plfFont = new LOGFONT;
+ if (m_plfFont)
+ memcpy(m_plfFont, plf, sizeof(LOGFONT));
+ }
+}
+
+LOGFONT* CGridCell::GetFont() const
+{
+ if (m_plfFont == NULL)
+ {
+ CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell();
+ if (!pDefaultCell)
+ return NULL;
+
+ return pDefaultCell->GetFont();
+ }
+
+ return m_plfFont;
+}
+
+CFont* CGridCell::GetFontObject() const
+{
+ // If the default font is specified, use the default cell implementation
+ if (m_plfFont == NULL)
+ {
+ CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell();
+ if (!pDefaultCell)
+ return NULL;
+
+ return pDefaultCell->GetFontObject();
+ }
+ else
+ {
+ static CFont Font;
+ Font.DeleteObject();
+ Font.CreateFontIndirect(m_plfFont);
+ return &Font;
+ }
+}
+
+DWORD CGridCell::GetFormat() const
+{
+ if (m_nFormat == (DWORD)-1)
+ {
+ CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell();
+ if (!pDefaultCell)
+ return 0;
+
+ return pDefaultCell->GetFormat();
+ }
+
+ return m_nFormat;
+}
+
+UINT CGridCell::GetMargin() const
+{
+ if (m_nMargin == (UINT)-1)
+ {
+ CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell();
+ if (!pDefaultCell)
+ return 0;
+
+ return pDefaultCell->GetMargin();
+ }
+
+ return m_nMargin;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCell Operations
+
+BOOL CGridCell::Edit(int nRow, int nCol, CRect rect, CPoint /* point */, UINT nID, UINT nChar)
+{
+ if ( m_bEditing )
+ {
+ if (m_pEditWnd)
+ m_pEditWnd->SendMessage ( WM_CHAR, nChar );
+ }
+ else
+ {
+ DWORD dwStyle = ES_LEFT;
+ if (GetFormat() & DT_RIGHT)
+ dwStyle = ES_RIGHT;
+ else if (GetFormat() & DT_CENTER)
+ dwStyle = ES_CENTER;
+
+ m_bEditing = TRUE;
+
+ // InPlaceEdit auto-deletes itself
+ CGridCtrl* pGrid = GetGrid();
+ m_pEditWnd = new CGridInPlaceEdit(pGrid, rect, dwStyle, nID, nRow, nCol, GetText(), nChar);
+ }
+ return TRUE;
+}
+
+void CGridCell::EndEdit()
+{
+ if (m_pEditWnd)
+ ((CGridInPlaceEdit*)m_pEditWnd)->EndEdit();
+}
+
+void CGridCell::OnEndEdit()
+{
+ m_bEditing = FALSE;
+ m_pEditWnd = NULL;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridDefaultCell
+
+CGridDefaultCell::CGridDefaultCell()
+{
+#ifdef _WIN32_WCE
+ m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX;
+#else
+ m_nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX | DT_END_ELLIPSIS;
+#endif
+ m_crFgClr = CLR_DEFAULT;
+ m_crBkClr = CLR_DEFAULT;
+ m_Size = CSize(30,10);
+ m_dwStyle = 0;
+
+#ifdef _WIN32_WCE
+ LOGFONT lf;
+ GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf);
+ SetFont(&lf);
+#else // not CE
+ NONCLIENTMETRICS ncm;
+ memset(&ncm,0,sizeof(NONCLIENTMETRICS));
+ ncm.cbSize = sizeof(NONCLIENTMETRICS);
+ //VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
+ SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);
+ SetFont(&(ncm.lfMessageFont));
+#endif
+}
+
+CGridDefaultCell::~CGridDefaultCell()
+{
+ m_Font.DeleteObject();
+}
+
+void CGridDefaultCell::SetFont(const LOGFONT* plf)
+{
+// ASSERT(plf);
+
+ if (!plf) return;
+
+ m_Font.DeleteObject();
+ m_Font.CreateFontIndirect(plf);
+
+ CGridCell::SetFont(plf);
+
+ // Get the font size and hence the default cell size
+ CDC* pDC = CDC::FromHandle(::GetDC(NULL));
+ if (pDC)
+ {
+ CFont* pOldFont = pDC->SelectObject(&m_Font);
+
+ SetMargin(pDC->GetTextExtent(_T(" "), 1).cx);
+ m_Size = pDC->GetTextExtent(_T(" XXXXXXXXXXXX "), 14);
+ m_Size.cy = (m_Size.cy * 3) / 2;
+
+ pDC->SelectObject(pOldFont);
+ ReleaseDC(NULL, pDC->GetSafeHdc());
+ }
+ else
+ {
+ SetMargin(3);
+ m_Size = CSize(40,16);
+ }
+}
+
+LOGFONT* CGridDefaultCell::GetFont() const
+{
+// ASSERT(m_plfFont); // This is the default - it CAN'T be NULL!
+ return m_plfFont;
+}
+
+CFont* CGridDefaultCell::GetFontObject() const
+{
+// ASSERT(m_Font.GetSafeHandle());
+ return (CFont*) &m_Font;
+}
--
Gitblit v1.9.3