GridDropTarget.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "pch.h"
  2. #include "GridDropTarget.h"
  3. #include "GridCtrl.h"
  4. /////////////////////////////////////////////////////////////////////////////
  5. // CGridDropTarget
  6. CGridDropTarget::CGridDropTarget()
  7. {
  8. m_pGridCtrl = NULL;
  9. m_bRegistered = FALSE;
  10. }
  11. CGridDropTarget::~CGridDropTarget()
  12. {
  13. }
  14. // Overloaded Register() function performs the normal COleDropTarget::Register
  15. // but also serves to connect this COleDropTarget with the parent grid control,
  16. // where all drop messages will ultimately be forwarded.
  17. BOOL CGridDropTarget::Register(CGridCtrl *pGridCtrl)
  18. {
  19. if (m_bRegistered)
  20. return FALSE;
  21. // Stop re-entry problems
  22. static BOOL bInProcedure = FALSE;
  23. if (bInProcedure)
  24. return FALSE;
  25. bInProcedure = TRUE;
  26. ASSERT(pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)));
  27. ASSERT(pGridCtrl);
  28. if (!pGridCtrl || !pGridCtrl->IsKindOf(RUNTIME_CLASS(CGridCtrl)))
  29. {
  30. bInProcedure = FALSE;
  31. return FALSE;
  32. }
  33. m_pGridCtrl = pGridCtrl;
  34. m_bRegistered = COleDropTarget::Register(pGridCtrl);
  35. bInProcedure = FALSE;
  36. return m_bRegistered;
  37. }
  38. void CGridDropTarget::Revoke()
  39. {
  40. m_bRegistered = FALSE;
  41. COleDropTarget::Revoke();
  42. }
  43. BEGIN_MESSAGE_MAP(CGridDropTarget, COleDropTarget)
  44. //{{AFX_MSG_MAP(CGridDropTarget)
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CGridDropTarget message handlers
  49. DROPEFFECT CGridDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint /*point*/)
  50. {
  51. // TRACE("In CGridDropTarget::OnDragScroll\n");
  52. if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  53. {
  54. if (dwKeyState & MK_CONTROL)
  55. return DROPEFFECT_COPY;
  56. else
  57. return DROPEFFECT_MOVE;
  58. }
  59. else
  60. return DROPEFFECT_NONE;
  61. }
  62. DROPEFFECT CGridDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject,
  63. DWORD dwKeyState, CPoint point)
  64. {
  65. TRACE(_T("In CGridDropTarget::OnDragEnter\n"));
  66. ASSERT(m_pGridCtrl);
  67. if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  68. return m_pGridCtrl->OnDragEnter(pDataObject, dwKeyState, point);
  69. else
  70. return DROPEFFECT_NONE;
  71. }
  72. void CGridDropTarget::OnDragLeave(CWnd* pWnd)
  73. {
  74. TRACE(_T("In CGridDropTarget::OnDragLeave\n"));
  75. ASSERT(m_pGridCtrl);
  76. if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  77. m_pGridCtrl->OnDragLeave();
  78. }
  79. DROPEFFECT CGridDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject,
  80. DWORD dwKeyState, CPoint point)
  81. {
  82. // TRACE("In CGridDropTarget::OnDragOver\n");
  83. ASSERT(m_pGridCtrl);
  84. if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  85. return m_pGridCtrl->OnDragOver(pDataObject, dwKeyState, point);
  86. else
  87. return DROPEFFECT_NONE;
  88. }
  89. BOOL CGridDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject,
  90. DROPEFFECT dropEffect, CPoint point)
  91. {
  92. TRACE(_T("In CGridDropTarget::OnDrop\n"));
  93. ASSERT(m_pGridCtrl);
  94. if (pWnd->GetSafeHwnd() == m_pGridCtrl->GetSafeHwnd())
  95. return m_pGridCtrl->OnDrop(pDataObject, dropEffect, point);
  96. else
  97. return FALSE;
  98. }