GridDropTarget.cpp
上传用户:jzscgs158
上传日期:2022-05-25
资源大小:8709k
文件大小:4k
源码类别:

百货/超市行业

开发平台:

Visual C++

  1. // GridDropTarget.cpp : implementation file
  2. //
  3. // MFC Grid Control - Drag/Drop target implementation
  4. //
  5. // CGridDropTarget is an OLE drop target for CGridCtrl. All it does
  6. // is handle the drag and drop windows messages and pass them
  7. // directly onto the grid control.
  8. //
  9. // Written by Chris Maunder <cmaunder@mail.com>
  10. // Copyright (c) 1998-2000. All Rights Reserved.
  11. //
  12. // This code may be used in compiled form in any way you desire. This
  13. // file may be redistributed unmodified by any means PROVIDING it is 
  14. // not sold for profit without the authors written consent, and 
  15. // providing that this notice and the authors name and all copyright 
  16. // notices remains intact. 
  17. //
  18. // An email letting me know how you are using it would be nice as well. 
  19. //
  20. // This file is provided "as is" with no expressed or implied warranty.
  21. // The author accepts no liability for any damage/loss of business that
  22. // this product may cause.
  23. //
  24. // For use with CGridCtrl v2.10+
  25. //
  26. /////////////////////////////////////////////////////////////////////////////
  27. #include "stdafx.h"
  28. #include "GridCtrl.h"
  29. #ifndef GRIDCONTROL_NO_DRAGDROP
  30. #include "GridDropTarget.h"
  31. #ifdef _DEBUG
  32. #define new DEBUG_NEW
  33. #undef THIS_FILE
  34. static char THIS_FILE[] = __FILE__;
  35. #endif
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CGridDropTarget
  38. CGridDropTarget::CGridDropTarget()
  39. {
  40.     m_pGridCtrl = NULL;
  41.     m_bRegistered = FALSE;
  42. }
  43. CGridDropTarget::~CGridDropTarget()
  44. {
  45. }
  46. // Overloaded Register() function performs the normal COleDropTarget::Register
  47. // but also serves to connect this COleDropTarget with the parent grid control,
  48. // where all drop messages will ultimately be forwarded.
  49. BOOL CGridDropTarget::Register(CGridCtrl *pGridCtrl)
  50. {
  51.     if (m_bRegistered)
  52.         return FALSE;
  53.     // Stop re-entry problems
  54.     static BOOL bInProcedure = FALSE;
  55.     if (bInProcedure)
  56.         return FALSE;
  57.     bInProcedure = TRUE;
  58.     ASSERT(pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)));
  59.     ASSERT(pGridCtrl);
  60.     if (!pGridCtrl || !pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)))
  61.     {
  62.         bInProcedure = FALSE;
  63.         return FALSE;
  64.     }
  65.     m_pGridCtrl = pGridCtrl;
  66.     m_bRegistered = COleDropTarget::Register(pGridCtrl);
  67.     bInProcedure = FALSE;
  68.     return m_bRegistered;
  69. }
  70. void CGridDropTarget::Revoke()
  71. {
  72.     m_bRegistered = FALSE;
  73.     COleDropTarget::Revoke();
  74. }
  75. BEGIN_MESSAGE_MAP(CGridDropTarget, COleDropTarget)
  76.     //{{AFX_MSG_MAP(CGridDropTarget)
  77.     //}}AFX_MSG_MAP
  78. END_MESSAGE_MAP()
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CGridDropTarget message handlers
  81. DROPEFFECT CGridDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint /*point*/)
  82. {
  83. //    TRACE("In CGridDropTarget::OnDragScrolln");
  84.     if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  85.     {
  86.         if (dwKeyState & MK_CONTROL)
  87.             return DROPEFFECT_COPY;
  88.         else
  89.             return DROPEFFECT_MOVE;
  90.     } else
  91.         return DROPEFFECT_NONE;
  92. }
  93. DROPEFFECT CGridDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, 
  94.                                         DWORD dwKeyState, CPoint point)
  95. {
  96.     TRACE(_T("In CGridDropTarget::OnDragEntern"));
  97.     ASSERT(m_pGridCtrl);
  98.     if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  99.         return m_pGridCtrl->OnDragEnter(pDataObject, dwKeyState, point);
  100.     else
  101.         return DROPEFFECT_NONE;
  102. }
  103. void CGridDropTarget::OnDragLeave(CWnd* pWnd)
  104. {
  105.     TRACE(_T("In CGridDropTarget::OnDragLeaven"));
  106.     ASSERT(m_pGridCtrl);
  107.     if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  108.         m_pGridCtrl->OnDragLeave();
  109. }
  110. DROPEFFECT CGridDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, 
  111.                                        DWORD dwKeyState, CPoint point)
  112. {
  113. //    TRACE("In CGridDropTarget::OnDragOvern");
  114.     ASSERT(m_pGridCtrl);
  115.     if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  116.         return m_pGridCtrl->OnDragOver(pDataObject, dwKeyState, point);
  117.     else
  118.         return DROPEFFECT_NONE;
  119. }
  120. BOOL CGridDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject,
  121.                              DROPEFFECT dropEffect, CPoint point)
  122. {
  123.     TRACE(_T("In CGridDropTarget::OnDropn"));
  124.     ASSERT(m_pGridCtrl);
  125.     if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  126.         return m_pGridCtrl->OnDrop(pDataObject, dropEffect, point);
  127.     else
  128.         return FALSE;
  129. }
  130. #endif // GRIDCONTROL_NO_DRAGDROP