123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- // 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-2001. 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
|