Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
156 lines
4.3 KiB
C++
156 lines
4.3 KiB
C++
// 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 <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.10+
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "GridCtrl.h"
|
|
|
|
#ifndef GRIDCONTROL_NO_DRAGDROP
|
|
#include "GridDropTarget.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static 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
|