GridDropTarget.cpp
上传用户:jzscgs158
上传日期:2022-05-25
资源大小:8709k
文件大小:4k
- // 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-2000. 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::OnDragScrolln");
- 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::OnDragEntern"));
- 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::OnDragLeaven"));
- 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::OnDragOvern");
- 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::OnDropn"));
- ASSERT(m_pGridCtrl);
- if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
- return m_pGridCtrl->OnDrop(pDataObject, dropEffect, point);
- else
- return FALSE;
- }
- #endif // GRIDCONTROL_NO_DRAGDROP