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/GridDropTarget.cpp | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 156 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/GridControl/GridDropTarget.cpp b/SourceCode/Bond/Servo/GridControl/GridDropTarget.cpp
new file mode 100644
index 0000000..c921abf
--- /dev/null
+++ b/SourceCode/Bond/Servo/GridControl/GridDropTarget.cpp
@@ -0,0 +1,156 @@
+// GridDropTarget.cpp : implementation file
+//
+// MFC Grid Control - Drag/Drop target implementation
+//
+// CGridDropTarget is an OLE drop target for CGridCtrl. All it does
+// is handle the drag and drop windows messages and pass them
+// directly onto the grid control.
+//
+// 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 "stdafx.h"
+#include "GridCtrl.h"
+
+#ifndef GRIDCONTROL_NO_DRAGDROP
+#include "GridDropTarget.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static const char* THIS_FILE = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridDropTarget
+
+CGridDropTarget::CGridDropTarget()
+{
+ m_pGridCtrl = NULL;
+ m_bRegistered = FALSE;
+}
+
+CGridDropTarget::~CGridDropTarget()
+{
+}
+
+// Overloaded Register() function performs the normal COleDropTarget::Register
+// but also serves to connect this COleDropTarget with the parent grid control,
+// where all drop messages will ultimately be forwarded.
+BOOL CGridDropTarget::Register(CGridCtrl *pGridCtrl)
+{
+ if (m_bRegistered)
+ return FALSE;
+
+ // Stop re-entry problems
+ static BOOL bInProcedure = FALSE;
+ if (bInProcedure)
+ return FALSE;
+ bInProcedure = TRUE;
+
+// ASSERT(pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)));
+// ASSERT(pGridCtrl);
+
+ if (!pGridCtrl || !pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)))
+ {
+ bInProcedure = FALSE;
+ return FALSE;
+ }
+
+ m_pGridCtrl = pGridCtrl;
+
+ m_bRegistered = COleDropTarget::Register(pGridCtrl);
+
+ bInProcedure = FALSE;
+ return m_bRegistered;
+}
+
+void CGridDropTarget::Revoke()
+{
+ m_bRegistered = FALSE;
+ COleDropTarget::Revoke();
+}
+
+BEGIN_MESSAGE_MAP(CGridDropTarget, COleDropTarget)
+ //{{AFX_MSG_MAP(CGridDropTarget)
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridDropTarget message handlers
+
+DROPEFFECT CGridDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint /*point*/)
+{
+// TRACE("In CGridDropTarget::OnDragScroll\n");
+ if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
+ {
+ if (dwKeyState & MK_CONTROL)
+ return DROPEFFECT_COPY;
+ else
+ return DROPEFFECT_MOVE;
+ } else
+ return DROPEFFECT_NONE;
+}
+
+DROPEFFECT CGridDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject,
+ DWORD dwKeyState, CPoint point)
+{
+// TRACE(_T("In CGridDropTarget::OnDragEnter\n"));
+// ASSERT(m_pGridCtrl);
+
+ if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
+ return m_pGridCtrl->OnDragEnter(pDataObject, dwKeyState, point);
+ else
+ return DROPEFFECT_NONE;
+}
+
+void CGridDropTarget::OnDragLeave(CWnd* pWnd)
+{
+// TRACE(_T("In CGridDropTarget::OnDragLeave\n"));
+// ASSERT(m_pGridCtrl);
+
+ if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
+ m_pGridCtrl->OnDragLeave();
+}
+
+DROPEFFECT CGridDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject,
+ DWORD dwKeyState, CPoint point)
+{
+/// TRACE("In CGridDropTarget::OnDragOver\n");
+// ASSERT(m_pGridCtrl);
+
+ if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
+ return m_pGridCtrl->OnDragOver(pDataObject, dwKeyState, point);
+ else
+ return DROPEFFECT_NONE;
+}
+
+BOOL CGridDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject,
+ DROPEFFECT dropEffect, CPoint point)
+{
+// TRACE(_T("In CGridDropTarget::OnDrop\n"));
+// ASSERT(m_pGridCtrl);
+
+ if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
+ return m_pGridCtrl->OnDrop(pDataObject, dropEffect, point);
+ else
+ return FALSE;
+}
+
+#endif // GRIDCONTROL_NO_DRAGDROP
\ No newline at end of file
--
Gitblit v1.9.3